我有以下df,其中包含更多数字列。我现在想要对数据帧中的所有列进行前向填充,但是按ID分组。
id date number number2
1 2001 4 11
1 2002 4 45
1 2003 NaN 13
2 2001 7 NaN
2 2002 8 2
结果应如下所示:
id date number number2
1 2001 4 11
1 2002 4 45
1 2003 4 13
2 2001 7 NaN
2 2002 8 2
我尝试了以下命令:
df= df.groupby("id").fillna(method="ffill", limit=2)
然而,这引发了一个KeyError" isin"。使用以下命令只填充一列就可以了,但是如何有效地向前填充由isin分组的整个df?
df["number"]= df.groupby("id")["number"].fillna(method="ffill", limit=2)
答案 0 :(得分:1)
您可以使用:
df = df.groupby("id").apply(lambda x: x.ffill(limit=2))
print (df)
id date number number2
0 1 2001 4.0 11.0
1 1 2002 4.0 45.0
2 1 2003 4.0 13.0
3 2 2001 7.0 NaN
4 2 2002 8.0 2.0
同样对我工作:
df.groupby("id").fillna(method="ffill", limit=2)
所以我认为是必要的升级熊猫。
答案 1 :(得分:0)
ffill
可以直接使用
df.groupby('id').ffill(2)
Out[423]:
id date number number2
0 1 2001 4.0 11.0
1 1 2002 4.0 45.0
2 1 2003 4.0 13.0
3 2 2001 7.0 NaN
4 2 2002 8.0 2.0
#isin
#df.loc[:,df.columns.isin([''])]=df.loc[:,df.columns.isin([''])].groupby('id').ffill(2)