我有以下数据框:
df.index = df['Date']
df.groupby([df.index.month, df['Category'])['Amount'].sum()
Date Category Amount
1 A -125.35
B -40.00
...
12 A 505.15
B -209.00
我想报告每个B类的金额总和:
Date Category Amount
1 B -40.00
...
12 B -209.00
我尝试了df.get_group
方法,但是此方法需要包含Date和Category键的元组。有没有办法只过滤出带有B的类别?
答案 0 :(得分:2)
您可以使用IndexSlice
:
# groupby here
df_group = df.groupby([df.index.month, df['Category'])['Amount'].sum()
# report only Category B
df_group.loc[pd.IndexSlice[:,'B'],:]
或查询:
# query works with index level name too
df_group.query('Category=="B"')
输出:
Amount
Date Category
1 B -40.0
12 B -209.0
答案 1 :(得分:0)
将过滤器应用于您的 groupby 数据框,其中 Category 等于 B
filter=df['Category']=='B'
df[filter].groupby([df.index.month, df['Category'])['Amount'].sum()