Pandas GROUPBY返回空数据帧且无错误

Pandas GROUPBY返回空数据帧且无错误,pandas,Pandas,我尝试使用groupby和agg,但我收到一个空数据帧,并且没有错误 当我这样做时: df_temp = df.groupby('Col1')['InfoType', 'InfoLabel1', 'InfoLabel2'].agg(lambda x: ', '.join(x)) df_temp = df.groupby('Col1', 'Col2')['InfoType', 'InfoLabel1', 'InfoLabel2'].agg(lambda x: ', '.join(x))

我尝试使用groupby和agg,但我收到一个空数据帧,并且没有错误

当我这样做时:

  df_temp = df.groupby('Col1')['InfoType', 'InfoLabel1', 'InfoLabel2'].agg(lambda x: ', '.join(x))
  df_temp = df.groupby('Col1', 'Col2')['InfoType', 'InfoLabel1', 'InfoLabel2'].agg(lambda x: ', '.join(x))
  df_temp = df.groupby('Col1', 'Col2', 'Col3')['InfoType', 'InfoLabel1', 'InfoLabel2'].agg(lambda x: ', '.join(x))
  df_temp = df.groupby('Col1', 'Col2', 'Col3', 'Col4')['InfoType', 'InfoLabel1', 'InfoLabel2'].agg(lambda x: ', '.join(x))
然后,我收到按预期聚合的数据帧

当我这样做时:

  df_temp = df.groupby('Col1')['InfoType', 'InfoLabel1', 'InfoLabel2'].agg(lambda x: ', '.join(x))
  df_temp = df.groupby('Col1', 'Col2')['InfoType', 'InfoLabel1', 'InfoLabel2'].agg(lambda x: ', '.join(x))
  df_temp = df.groupby('Col1', 'Col2', 'Col3')['InfoType', 'InfoLabel1', 'InfoLabel2'].agg(lambda x: ', '.join(x))
  df_temp = df.groupby('Col1', 'Col2', 'Col3', 'Col4')['InfoType', 'InfoLabel1', 'InfoLabel2'].agg(lambda x: ', '.join(x))
然后,我收到按预期聚合的数据帧

当我这样做时:

  df_temp = df.groupby('Col1')['InfoType', 'InfoLabel1', 'InfoLabel2'].agg(lambda x: ', '.join(x))
  df_temp = df.groupby('Col1', 'Col2')['InfoType', 'InfoLabel1', 'InfoLabel2'].agg(lambda x: ', '.join(x))
  df_temp = df.groupby('Col1', 'Col2', 'Col3')['InfoType', 'InfoLabel1', 'InfoLabel2'].agg(lambda x: ', '.join(x))
  df_temp = df.groupby('Col1', 'Col2', 'Col3', 'Col4')['InfoType', 'InfoLabel1', 'InfoLabel2'].agg(lambda x: ', '.join(x))
然后,我收到按预期聚合的数据帧

但当我这么做的时候:

  df_temp = df.groupby('Col1')['InfoType', 'InfoLabel1', 'InfoLabel2'].agg(lambda x: ', '.join(x))
  df_temp = df.groupby('Col1', 'Col2')['InfoType', 'InfoLabel1', 'InfoLabel2'].agg(lambda x: ', '.join(x))
  df_temp = df.groupby('Col1', 'Col2', 'Col3')['InfoType', 'InfoLabel1', 'InfoLabel2'].agg(lambda x: ', '.join(x))
  df_temp = df.groupby('Col1', 'Col2', 'Col3', 'Col4')['InfoType', 'InfoLabel1', 'InfoLabel2'].agg(lambda x: ', '.join(x))
然后我收到一个空的数据帧,没有错误

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

为什么会这样

‘Col1’、‘Col2’、‘Col3’、‘Col4’属于不同的类型,但我不认为这是问题所在,因为例如,Col1’、‘Col2’、‘Col3’属于不同的类型,但当我仅根据这些类型进行分组时,聚合是有效的

在这些列中,它是否与NAs相关

附言

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

p.S.2


我做了以下几件事。在groupby之前,我在np.nan中填入了浮点数的值eg-1和对象的值“NA”,代码运行正常,因此我对NAs的初始假设可能是正确的。请随意分享发生这种情况的原因。

原因很明显,在所有由所有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)

版本1.1.0将在groupby中有一个dropna参数来处理此类情况。您可以将其设置为False以在groupby键中包含NA值。对于向后兼容性,默认值为True,请参阅。

原因很明显,在由所有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)

版本1.1.0将在groupby中有一个dropna参数来处理此类情况。您可以将其设置为False以在GroupByKeys中包含NA值。对于向后兼容性,默认值为True,请参见。

您可以添加您的输入和预期的数据帧吗?请参阅columns\u not\u group不能有任何NA值-这必须是列名列表,而不是列本身。您应该检查您是如何创建列而不是组的。@datanoveler,在不暴露太多数据的情况下创建列有点费时。我认为,如果有人对熊猫有经验,那么他/她可能会提出一些好的假设,说明为什么会发生上述情况,并且不会返回错误。我怀疑它与列值中的NA值有关,列值对应于列\而不是\组,但我可能是wrong@Stef,我的意思是对应于columns\u not\u组的列值-显然columns\u not\u组不能有任何NAs。@datanoveler,我做了以下操作。在groupby之前,我在np.nan中填入了浮点数的值eg-1和对象的值“NA”,代码运行正常,因此我对NAs的初始假设可能是正确的。你知道为什么会发生这种情况吗?你能添加你的输入和预期的数据帧吗?请参阅columns\u not\u group不能有任何NA值-这必须是列名列表,而不是列本身。您应该检查您是如何创建列而不是组的。@datanoveler,在不暴露太多数据的情况下创建列有点费时。我认为,如果有人对熊猫有经验,那么他/她可能会提出一些好的假设,说明为什么会发生上述情况,并且不会返回错误。我怀疑它与列值中的NA值有关,列值对应于列\而不是\组,但我可能是wrong@Stef,我的意思是对应于columns\u not\u组的列值-显然columns\u not\u组不能有任何NAs。@datanoveler,我做了以下操作。在groupby之前,我在np.nan中填入了浮点数的值eg-1和对象的值“NA”,代码运行正常,因此我对NAs的初始假设可能是正确的。你知道为什么会这样吗?好吧,如果这是真的,那基本上就是我说的;或者,好吧,让我们假设普遍怀疑-我没有明确给出具体解释。因此,您必须等待1.1.0,暂时填写您的NAs,请参阅我的更新答案。好的,我知道了,谢谢:我是不是觉得很奇怪,pandas默认忽略了每一个groupby行,其中一列中只有一个NA,而且pandas也没有改变它的选项?我看不出保留这些行在概念上或技术上有什么问题
他的发行是在2013年发行的!好的,我明白了,谢谢投票;-Indeds pandas对于一些非常重要的东西太沉默了,尽管正如你提到的,这是在文档中写的。好吧,如果这是真的,那么这就是我基本上说的;或者,好吧,让我们假设普遍怀疑-我没有明确给出具体解释。因此,您必须等待1.1.0,暂时填写您的NAs,请参阅我的更新答案。好的,我知道了,谢谢:我是不是觉得很奇怪,pandas默认忽略了每一个groupby行,其中一列中只有一个NA,而且pandas也没有改变它的选项?我看不出保留这些行在概念上或技术上有什么问题。我认为这里详细讨论了这一点:这个问题是在2013年发布的!好的,我明白了,谢谢投票;-Indeds pandas对于一些非常重要的东西过于沉默,尽管正如你提到的,这是在文档中的某个地方写的。