我有一个看起来像这样的数据框:
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'的数据过滤到。
另外,我想检验(c,2018年2月2日)在不同的数据框列中,以便结果如下所示:
df_grouped:
Type Months Year Marks
c 2 2018 89
我当前的代码:
sumOfTypes = data.groupby(['Type','Months','Year'])['Marks'].sum()
df_grouped = pd.DataFrame(sumOfTypes)
答案 0 :(得分:1)
添加as_index=False
或reset_index
以返回DataFrame
,然后用boolean indexing
用isin
进行过滤:
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'])]
或通过boolean indexing
和MultiIndex Series
进行过滤,以选择级别使用get_level_values
:
sumOfTypes = data.groupby(['Type','Months','Year'])['Marks'].sum()
s = sumOfTypes[sumOfTypes.index.get_level_values('Type').isin(['a','b'])]