Group by 返回空数据帧并且没有错误

Poe*_*dit 5 pandas

我尝试groupbyagg收到一个空数据帧并且没有错误。

当我这样做时:

  df_temp = df.groupby('Col1')['InfoType', 'InfoLabel1', 'InfoLabel2'].agg(lambda x: ', '.join(x))
Run Code Online (Sandbox Code Playgroud)

然后我收到按预期聚合的数据帧。

当我这样做时:

  df_temp = df.groupby('Col1', 'Col2')['InfoType', 'InfoLabel1', 'InfoLabel2'].agg(lambda x: ', '.join(x))
Run Code Online (Sandbox Code Playgroud)

然后我收到按预期聚合的数据帧。

当我这样做时:

  df_temp = df.groupby('Col1', 'Col2', 'Col3')['InfoType', 'InfoLabel1', 'InfoLabel2'].agg(lambda x: ', '.join(x))
Run Code Online (Sandbox Code Playgroud)

然后我收到按预期聚合的数据帧。

但是当我这样做时:

  df_temp = df.groupby('Col1', 'Col2', 'Col3', 'Col4')['InfoType', 'InfoLabel1', 'InfoLabel2'].agg(lambda x: ', '.join(x))
Run Code Online (Sandbox Code Playgroud)

然后我收到一个空数据帧并且没有错误。

但是,我不认为问题是Col4因为当我删除Col2并仍然保留Col4时,我收到了按预期聚合的数据帧。

为什么会发生这种情况?

'Col1'、'Col2'、'Col3'、'Col4' 属于不同类型,但我不认为这是问题,因为例如 Col1'、'Col2'、'Col3' 也属于不同类型,但聚合当我仅对这些进行分组时有效。

是否与这些列中的 NA 有关?

聚苯乙烯

我知道最好有我的数据的具体示例,但将它们发布在这里太耗时,而且我根本不想公开我的数据。

PS2

我做了以下事情。在之前groupby,我用值填充了np.nan(例如 -1 代表浮点数,'NA' 代表对象)并且代码有效,所以我对 NA 的最初假设可能是正确的。请随意分享为什么会发生这种情况。

Ste*_*tef 10

原因是在所有 4 列创建的所有组中至少有一个NA值。因此,这些组被排除,结果为空。如果您的列数少于 4 列,则实际数据显然不满足此条件。

请参阅有关缺失值的文档

GroupBy 中的 NA 组将自动排除。

例子:

>>> df = pd.DataFrame({'a':[None,1,2], 'b':[1,None,2], 'c': [1,2,None], 'd': [1,1,1]})
>>> df
     a    b    c  d
0  NaN  1.0  1.0  1
1  1.0  NaN  2.0  1
2  2.0  2.0  NaN  1
>>> df.groupby(['a', 'b']).d.sum()
a    b  
2.0  2.0    1
Name: d, dtype: int64
>>> df.groupby(['a', 'c']).d.sum()
a    c  
1.0  2.0    1
Name: d, dtype: int64
>>> df.groupby(['b', 'c']).d.sum()
b    c  
1.0  1.0    1
Name: d, dtype: int64
>>> df.groupby(['a', 'b', 'c']).d.sum()
Series([], Name: d, dtype: int64)
Run Code Online (Sandbox Code Playgroud)

1.1.0版本将有一个dropna参数groupby来处理这种情况。您可以将其设置为在 groupby 键中False包含值(默认值是为了向后兼容),请参阅https://github.com/pandas-dev/pandas/pull/30584NATrue