其中有NaN/None值的列不是groupby键列,当使用last()
时,似乎groupby正在做某种填充:
df = pd.DataFrame({'a': [1, 2, 1, 2], 'b': [23, 43, np.nan, 12], 'c': ['x', 'y', 'z', None]})
a b c
0 1 23.0 x
1 2 43.0 y
2 1 NaN z
3 2 12.0 None
df.groupby(by='a', as_index=False, dropna=False).last()
a b c
0 1 23.0 z
1 2 12.0 y
期望输出
a b c
0 1 NaN z
1 2 12.0 None
dropna=False
没有帮助,因为它只适用于按列'a'分组。有没有一种方法可以让熊猫不忽略NaN/None值而不进行黑客攻击?
last
用于获取最后一个非na值,在每列中独立。
您想要的(每组最后一行)是tail
:
df.groupby(by='a', as_index=False).tail(1)
输出:
a b c
2 1 NaN z
3 2 12.0 None