我有以下数据帧,这是执行groupby +聚合总和的结果:
df.groupby(['id', 'category']).agg([pd.Series.sum])
supply stock
sum sum
id category
4 abc 161 -0.094
6 sde -76 0.150
23 hgv 64 -0.054
1 wcd -14 0.073
76 jhf -8 -0.057
由于groupby和agg,列标题现在是元组。如何将列标题更改回单个值,即:列标题必须为supply
和stock
。我只需要从标题中删除sum
答案 0 :(得分:2)
如果使用sum,则不会将“agg function name”创建为列的一部分(作为MultiIndex):
df.groupby(['id', 'category']).sum()
要删除它们,您可以删除级别:
df.columns = df.columns.droplevel(1)
例如:
In [11]: df
Out[11]:
supply stock
sum sum
0 0.501176 0.482497
1 0.442689 0.008664
2 0.885112 0.512066
3 0.724619 0.418720
In [12]: df.columns.droplevel(1)
Out[12]: Index(['supply', 'stock'], dtype='object')
In [13]: df.columns = df.columns.droplevel(1)
In [14]: df
Out[14]:
supply stock
0 0.501176 0.482497
1 0.442689 0.008664
2 0.885112 0.512066
3 0.724619 0.418720
答案 1 :(得分:1)
您可以将columns
属性显式设置为您想要的任何属性。例如:
>>> df = pd.DataFrame(np.random.random((4, 2)),
... columns=pd.MultiIndex.from_arrays([['supply', 'stock'],
['sum', 'sum']]))
>>> df
supply stock
sum sum
0 0.170950 0.314759
1 0.632121 0.147884
2 0.955682 0.127857
3 0.776764 0.318614
>>> df.columns = df.columns.get_level_values(0)
>>> df
supply stock
0 0.170950 0.314759
1 0.632121 0.147884
2 0.955682 0.127857
3 0.776764 0.318614