如何在执行df.groupby时在groupby列之一中保留null / nan

时间:2019-03-07 02:59:18

标签: python pandas

让我们说我有一个像这样的数据框:

group_cols = ['Group1', 'Group2', 'Group3']

df = pd.DataFrame([['A', 'B', 'C', 54.34],
                   ['A', 'B', np.nan, 61.34],
                   ['B', 'A', 'C', 514.5],
                   ['B', 'A', 'A', 765.4],
                   ['A', 'B', 'D', 765.4]],
                  columns=(group_cols+['Value']))

Group1  Group 2 Group 3  Value
A        B        C     54.34
A        B       nan    61.34
B        A        C     514.5
B        A        A     765.4
A        B        D     765.4

当我在这3列上进行分组时,nan行以某种方式被删除/删除。 理想情况下,我希望保留组合(在这种情况下为A,B和nan)。因此,我的输出中应该有单独的一行。但是它掉了。

df2 = df.groupby(['Group1', 'Group2', 'Group3'],as_index=False).sum()

Group1  Group 2 Group 3  Value
A        B        C     54.34
A        B        D     765.4
B        A        A     765.4
B        A        C     514.5

要解决此问题,我可以填充一些值,然后进行分组以使我看到那里的行,但是我觉得这不是理想的解决方案。

请您分享我如何保留南行?

1 个答案:

答案 0 :(得分:1)

这是在fillna之前移至groupby的一种方法,因为groupby将自动删除NaN

df.fillna('NaN',inplace=True)
df2 = df.groupby(['Group1', 'Group2', 'Group3'],as_index=False).sum()
df2
  Group1 Group2 Group3   Value
0      A      B      C   54.34
1      A      B      D  765.40
2      A      B    NaN   61.34
3      B      A      A  765.40
4      B      A      C  514.50

来自文档:http://pandas.pydata.org/pandas-docs/stable/user_guide/groupby.html

> NA和NaT组处理

  

如果其中有任何NaN或NaT值   分组密钥,这些将被自动排除。换一种说法,   永远不会有“ NA组”或“ NaT组”。这不是   较早版本的熊猫就是这种情况,但用户通常会丢弃   无论如何,NA组(并支持它是一个实施   头痛)。