使用多列分组后筛选结果

2024-10-01 07:23:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧,看起来像:

Type     Months     Year    Marks
 a        1          2018     64
 a        1          2017     69
 a        1          2016     69
 b        1          2018     78
 b        1          2017     71
 b        1          2016     91
 c        1          2018     58
 c        1          2017     65
 c        1          2016     83

 a        2          2018     58
 a        2          2017     65
 a        2          2016     83
 a        3          2018     58
 a        3          2017     65
 a        3          2016     83

我想按‘类型’、‘月份’、‘年份’进行分组,总结分数。你知道吗

sumOfTypes = data.groupby(['Type','Months','Year'])['Marks'].sum()

结果如下:

(a, 1, 2018)                  60
(a, 1, 2017)                  54
 .
 .
(c, 1, 2016)                  86           
(c, 2, 2018)                  89

但是,我只希望将数据筛选为类型“a”和“b”。你知道吗

另外,我希望vut(c,22018)位于不同的dataframes列中,因此结果如下所示:

数据框分组:

   Type     Months     Year    Marks    
    c         2        2018     89

我的当前代码:

sumOfTypes = data.groupby(['Type','Months','Year'])['Marks'].sum()
df_grouped = pd.DataFrame(sumOfTypes)

Tags: 数据类型datatypeyear分数dataframessum
1条回答
网友
1楼 · 发布于 2024-10-01 07:23:34

添加as_index=False^{}作为返回DataFrame,然后用^{}^{}过滤:

sumOfTypes = data.groupby(['Type','Months','Year'], as_index=False)['Marks'].sum()
#alternative
#sumOfTypes = data.groupby(['Type','Months','Year'])['Marks'].sum().reset_index()

df = sumOfTypes[sumOfTypes['Type'].isin(['a','b'])]

或者用MultiIndex Series^{}过滤,对于选择级别使用^{}

sumOfTypes = data.groupby(['Type','Months','Year'])['Marks'].sum()

s = sumOfTypes[sumOfTypes.index.get_level_values('Type').isin(['a','b'])]

相关问题 更多 >