在熊猫中使用groupby时,可以根据列数据对数据进行分组。但你的小组排成一排。你只需要在分组前和分组后转置你的df。
这是您需要的代码:
首先,让我们创建像您这样的df:
import pandas as pd
index = pd.MultiIndex.from_tuples([(2016, 3, 'Sep', 'A'),
(2016, 3, 'Sep', 'B'),
(2016, 3, 'Sep', 'C'),
(2016, 4, 'Oct', 'A'),
(2016, 4, 'Oct', 'B'),
(2016, 4, 'Oct', 'C'),
(2016, 4, 'Nov', 'A'),
(2016, 4, 'Nov', 'B'),
(2016, 4, 'Nov', 'C'),
(2017, 1, 'Jan', 'A'),
(2017, 1, 'Jan', 'B'),
(2017, 1, 'Jan', 'C'),
(2017, 1, 'Feb', 'A'),
(2017, 1, 'Feb', 'B'),
(2017, 1, 'Feb', 'C'),
], names=['Year', 'Quarter', 'Month', 'Group'])
raw_df = pd.Series(range(15), index=index)
df = raw_df.unstack([0,1,2])
print(df)
输出:
Year 2016 2017
Quarter 3 4 1
Month Sep Oct Nov Jan Feb
Group
A 0 3 6 9 12
B 1 4 7 10 13
C 2 5 8 11 14
和你的例子一模一样。现在只需要一行代码:
new_df = df.transpose().groupby(['Year', 'Quarter']).sum().transpose()
print(new_df)
这是您的输出:
Year 2016 2017
Quarter 3 4 1
Group
A 0 9 21
B 1 11 23
C 2 13 25
祝你好运!