0

我有以下带有更多数字列的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)
4

2 回答 2

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)

所以我认为有必要升级熊猫。

于 2018-01-22T15:26:54.860 回答
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)
于 2018-01-22T15:27:25.730 回答