聚合空数据框时保留列

时间:2016-07-29 13:37:26

标签: python pandas group-by

我在python 2.7.9上使用pandas 0.18.0。

取样DataFrame并分组几列,然后在结果的不同列上求和,如下所示:

>>> df = pandas.DataFrame([[1,2,3],[4,5,6],[1,2,9]], columns=['a','b','c'])
>>> print df
   a  b  c
0  1  2  3
1  4  5  6
2  1  2  9
>>> df.groupby(['a','b'], as_index=False)['c'].sum()
   a  b   c
0  1  2  12
1  4  5   6

一切看起来都很棒,但是当在空DataFrame上执行相同的操作时,会从结果中删除列:

>>> empty = pandas.DataFrame(columns=['a','b','c'])
>>> print empty
Empty DataFrame
Columns: [a, b, c]
Index: []
>>> empty.groupby(['a','b'], as_index=False)['c'].sum() 
Empty DataFrame
Columns: []
Index: []

如果有人在代码中稍后引用结果中的有效列,则会导致密钥错误。有没有办法保留列?

1 个答案:

答案 0 :(得分:2)

我相信这是groupby.sum()的标准结果(请参阅此处http://pandas.pydata.org/pandas-docs/stable/missing_data.html)。

我能想到的唯一方法就是编写一个if语句来检查数据帧是否为空,例如:

if sum(empty.isnull().sum()) == 9:
    print "empty dataframe"
elif sum(empty.isnull().sum()) < 9:
    empty.groupby(['a','b'], as_index=False)['c'].sum()

这应该使您的空数据框与列标题保持一致。 希望这会有所帮助。