pandas:fillna整个df with groupby

时间:2018-01-22 15:24:03

标签: pandas group-by fillna

我有以下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)

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)