对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,以便阅读代码的人知道会发生什么吗?
答案 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: []