Pandas groupby非键列中的NaN/None值



其中有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

最新更新