为了账号安全,请及时绑定邮箱和手机立即绑定

具有NaN(缺失)值的分组列

具有NaN(缺失)值的分组列

眼眸繁星 2019-10-09 16:41:32
我有一个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)。


查看完整回答
反对 回复 2019-10-09
?
慕桂英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


查看完整回答
反对 回复 2019-10-09
  • 3 回答
  • 0 关注
  • 425 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信