猿问

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

我有一个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目标值的行。(我想包括这些行!)


由于我需要许多这样的操作(许多col具有缺失的值),并且除了中位数(通常是随机森林)之外,还使用更复杂的函数,因此我想避免编写过于复杂的代码。


有什么建议么?我应该为此编写一个函数还是有一个简单的解决方案?


眼眸繁星
浏览 426回答 3
3回答

有只小跳蛙

这是在文档的丢失数据部分中提到:GroupBy中的NA组被自动排除。例如,此行为与R一致。一种解决方法是在进行分组方式之前使用占位符(例如-1):In [11]: df.fillna(-1)Out[11]:    a   b0  1   41  2  -12  3   6In [12]: df.fillna(-1).groupby('b').sum()Out[12]:     ab    -1  24   16   3就是说,这感觉很糟糕……也许应该有一个在groupby中包含NaN的选项(请参阅此github问题 -使用相同的占位符hack)。

慕桂英3389331

古老的话题,如果有人仍然迷迷糊糊-另一个解决方法是在分组之前通过.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:    ab   4   16   3nan 2
随时随地看视频慕课网APP

相关分类

Python
我要回答