【发布时间】:2013-08-28 01:53:32
【问题描述】:
我有一个 DataFrame,在我希望分组的列中有许多缺失值:
import pandas as pd
import numpy as np
df = pd.DataFrame({'a': ['1', '2', '3'], 'b': ['4', np.NaN, '6']})
In [4]: df.groupby('b').groups
Out[4]: {'4': [0], '6': [2]}
看到 Pandas 已经删除了具有 NaN 目标值的行。 (我想包括这些行!)
因为我需要很多这样的操作(很多列有缺失值),并且使用比中位数更复杂的函数(通常是随机森林),所以我想避免编写太复杂的代码。
有什么建议吗?我应该为此编写一个函数还是有一个简单的解决方案?
【问题讨论】:
-
-
无法在组中包含(和传播)NaN 非常令人恼火。引用 R 并不令人信服,因为这种行为与许多其他事情不一致。无论如何,虚拟黑客也很糟糕。但是,如果有 NaN,组的大小(包括 NaN)和计数(忽略 NaN)会有所不同。 dfgrouped = df.groupby(['b']).a.agg(['sum','size','count']) dfgrouped['sum'][dfgrouped['size']!=dfgrouped['count ']] = 无
-
你能总结一下你具体想要达到的目标吗?即我们看到了一个输出,但是“期望的”输出是什么?
-
使用 pandas 1.1,您很快就能在
groupby()中指定dropna=False以获得您想要的结果。 More info -
请注意,在撰写本文时,有一个错误导致
dropna=False因 MultiIndex 分组而失败。有一些未解决的问题在他们的 github 上提到了这一点,不幸的是,修复它的动力并不大。
标签: python pandas group-by pandas-groupby nan