我有一个DataFrame,在希望分组的列中有许多缺失值:import pandas as pdimport numpy as npdf = pd.DataFrame({'a': ['1', '2', '3'], 'b': ['4', np.NaN, '6']})In [4]: df.groupby('b').groupsOut[4]: {'4': [0], '6': [2]}看到Pandas删除了具有NaN目标值的行。(我想包括这些行!)由于我需要许多这样的操作(许多col具有缺失的值),并且除了中位数(通常是随机森林)之外,还使用更复杂的函数,因此我想避免编写过于复杂的代码。有什么建议么?我应该为此编写一个函数还是有一个简单的解决方案?
3 回答
有只小跳蛙
TA贡献1824条经验 获得超8个赞
这是在文档的丢失数据部分中提到:
GroupBy中的NA组被自动排除。例如,此行为与R一致。
一种解决方法是在进行分组方式之前使用占位符(例如-1):
In [11]: df.fillna(-1)
Out[11]:
a b
0 1 4
1 2 -1
2 3 6
In [12]: df.fillna(-1).groupby('b').sum()
Out[12]:
a
b
-1 2
4 1
6 3
就是说,这感觉很糟糕……也许应该有一个在groupby中包含NaN的选项(请参阅此github问题 -使用相同的占位符hack)。
慕桂英3389331
TA贡献2036条经验 获得超8个赞
古老的话题,如果有人仍然迷迷糊糊-另一个解决方法是在分组之前通过.astype(str)转换为字符串。这样可以节省NaN。
in:
df = pd.DataFrame({'a': ['1', '2', '3'], 'b': ['4', np.NaN, '6']})
df['b'] = df['b'].astype(str)
df.groupby(['b']).sum()
out:
a
b
4 1
6 3
nan 2
添加回答
举报
0/150
提交
取消