pandas: fillna whole df with groupby
pandas: fillna whole df with groupby
我有以下带有更多数字列的 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)
您可以使用:
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)
所以我认为有必要升级pandas。
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)
我有以下带有更多数字列的 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)
您可以使用:
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)
所以我认为有必要升级pandas。
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)