Python 大熊猫群回填柱体
我有一个类似csv的Python 大熊猫群回填柱体,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个类似csv的 A,B,C,D 1,2,, 1,2,30,100 1,2,40,100 4,5,, 4,5,60,200 4,5,70,200 8,9,, 第1行和第4行中缺少C值(NaN)。我想分别从第2行和第5行获取它们的值。(相同A、B值的首次出现) 如果找不到匹配的行,只需输入0(如最后一行) 预期op: A,B,C,D 1,2,30, 1,2,30,100 1,2,40,100 4,5,60, 4,5,60,200 4,5,70,200 8,9,0, 使用fillna我发现B
A,B,C,D
1,2,,
1,2,30,100
1,2,40,100
4,5,,
4,5,60,200
4,5,70,200
8,9,,
第1行和第4行中缺少C值(NaN
)。我想分别从第2行和第5行获取它们的值。(相同A、B值的首次出现)
如果找不到匹配的行,只需输入0(如最后一行)
预期op:
A,B,C,D
1,2,30,
1,2,30,100
1,2,40,100
4,5,60,
4,5,60,200
4,5,70,200
8,9,0,
使用
fillna
我发现B填充:使用下一个有效观察值来填充间隙
,但必须逻辑地进行下一个观察值(查看列A、B值)不仅是即将到来的C列值您还必须首先在A
和B
上调用df.groupby
,然后应用bfill
函数:
In [501]: df.C = df.groupby(['A', 'B']).apply(lambda x: x.C.bfill()).reset_index(drop=True)
In [502]: df
Out[502]:
A B C D
0 1 2 30 NaN
1 1 2 30 100.0
2 1 2 40 100.0
3 4 5 60 NaN
4 4 5 60 200.0
5 4 5 70 200.0
6 8 9 0 NaN
您还可以分组,然后直接调用dfGroupBy.bfill
(我认为这样会更快):
如果您希望清除D
中的NaN
s,可以执行以下操作:
df.D.fillna('', inplace=True)
但下一个观察结果必须符合逻辑(查看列A、B值)
你能详细说明吗?假设第5行有4,7,70100,然后第6行是4,5,60200,即使如此,60也应该放在第4行C列,而不是70列。因为第6行(匹配4,5)而不是第5行(4,7)。我希望我很清楚谢谢@COLDSPEED它对我很好。
df.D.fillna('', inplace=True)