pandas groupby-agg在没有as_index参数的情况下保持组列不一致

时间:2015-06-01 17:23:37

标签: python pandas types

对2列DataFrame的2列进行分组会将列保留为列:

>>> df = pandas.DataFrame({'a':[1,2,3],'b':[4,5,6]})
>>> df
   a  b
0  1  4
1  2  5
2  3  6

[3 rows x 2 columns]
>>> df.groupby(['a','b']).agg(sum)
     a  b
a b      
1 4  1  4
2 5  2  5
3 6  3  6

[3 rows x 2 columns]

但是,对3列DataFrame的2列进行分组会将这些列转换为索引:

>>> df = pandas.DataFrame({'a':[1,2,3],'b':[4,5,6],'c':[7,8,9]})
>>> df
   a  b  c
0  1  4  7
1  2  5  8
2  3  6  9

[3 rows x 3 columns]
>>> df.groupby(['a','b']).agg(sum)
     c
a b   
1 4  7
2 5  8
3 6  9

[3 rows x 1 columns]

传递as_index=False始终返回列:

>>> df.groupby(['a','b'], as_index=False).agg(sum)
   a  b  c
0  1  4  7
1  2  5  8
2  3  6  9

[3 rows x 3 columns]

这里的最佳做法是始终使用as_index = False,以便阅读代码的人知道会发生什么吗?

1 个答案:

答案 0 :(得分:1)

第一个行为让我感到困惑,可能是一个弃用的功能?在Python 3.4.1上,Pandas 0.16.1和我得到以下内容:

df = pd.DataFrame({'a':[1,2,3],'b':[4,5,6]})
df.groupby(['a','b']).agg(sum)

Empty DataFrame
Columns: []
Index: []