我有两列的Pandas数据框,例如:
df = ID state
255 NJ
255 NaN
266 CT
266 CT
277 NaN
277 NY
277 NaN
我想填写state
中的缺失值。
所需的输出如下:
df = ID state
255 NJ
255 NJ
266 CT
266 CT
277 NY
277 NY
277 NY
我该如何克服?尝试但没有成功。尝试numpy.where
创建遮罩,但遇到此错误operands could not be broadcast together with shapes (26229,) (2053,) ()
等。任何帮助表示赞赏。
答案 0 :(得分:2)
IIUC,每个ID
都有一个唯一的state
,所以:
df['state'] = df.groupby('ID')['state'].transform('first')
输出:
ID state
0 255 NJ
1 255 NJ
2 266 CT
3 266 CT
4 277 NY
5 277 NY
6 277 NY
答案 1 :(得分:1)
首先sort_values,然后使用groupby进行填充
df.sort_values(by=['ID','state'],ascending=[True,True],inplace=True)
df['state'] = df.groupby(['ID']).transform(pd.Series.ffill)
答案 2 :(得分:1)
将groupby
与ffill
+ bfill
一起使用
df.state=df.groupby('ID').state.apply(lambda x : x.ffill().bfill())
df
Out[907]:
ID state
0 255 NJ
1 255 NJ
2 266 CT
3 266 CT
4 277 NY
5 277 NY
6 277 NY
答案 3 :(得分:1)
将DataFrame.sort_values
与GroupBy.ffill
一起使用:
df['state'] = df.sort_values('state').groupby('ID')['state'].ffill()
print (df)
ID state
0 255 NJ
1 255 NJ
2 266 CT
3 266 CT
4 277 NY
5 277 NY
6 277 NY
如果需要填充多列,请使用:
cols = ['state', ...]
df.loc[:, cols] = df.sort_values('state').groupby('ID')[cols].ffill()