我在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: []
如果有人在代码中稍后引用结果中的有效列,则会导致密钥错误。有没有办法保留列?
答案 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()
这应该使您的空数据框与列标题保持一致。 希望这会有所帮助。