2013-05-02 40 views
12

tôi đang đối phó với gấu trúc DataFrames như thế này:Điền vào dữ liệu bị mất gấu trúc với giá trị không thiếu trước, nhóm lại theo chính

id x 
0 1 10 
1 1 20 
2 2 100 
3 2 200 
4 1 NaN 
5 2 NaN 
6 1 300 
7 1 NaN 

Tôi muốn thay thế mỗi NAN 'x' với phi NAN trước 'x' từ một hàng có cùng giá trị 'id':

id x 
0 1 10 
1 1 20 
2 2 100 
3 2 200 
4 1 20 
5 2 200 
6 1 300 
7 1 300 

Có cách nào khéo léo để thực hiện việc này mà không cần lặp lại theo cách thủ công trên các hàng không?

Trả lời

16

Bạn có thể thực hiện một hoạt động groupby/forward-fill trên mỗi nhóm:

import numpy as np 
import pandas as pd 

df = pd.DataFrame({'id': [1,1,2,2,1,2,1,1], 'x':[10,20,100,200,np.nan,np.nan,300,np.nan]}) 
df['x'] = df.groupby(['id'])['x'].ffill() 
print(df) 

mang

id  x 
0 1 10.0 
1 1 20.0 
2 2 100.0 
3 2 200.0 
4 1 20.0 
5 2 200.0 
6 1 300.0 
7 1 300.0 
+0

Tùy chọn 'ffill' là những gì tôi cần. Cảm ơn! – ChrisB

+1

Bạn cũng có thể làm 'df ['x'] = df.groupby ('id'). Fillna (phương thức = 'ffill')' để đạt được cùng một cú pháp đơn giản hơn một chút. – Zhang18

+0

@ Zhang18: Cảm ơn bạn đã cải thiện. 'df.groupby (['id']). ffill()' cũng sẽ hoạt động. – unutbu

Các vấn đề liên quan