Mer*_*lin 5 python multi-index dataframe pandas pandas-groupby
使用这个:
ipl_data = {'Team': ['Riders', 'Riders', 'Devils', 'Devils', 'Kings',
'Kings', 'Kings', 'Kings', 'Riders', 'Royals', 'Royals', 'Riders'],
'Rank': [1, 2, 2, 3, 3,4 ,1 ,1,2 , 4,1,2],
'Points':[876,789,863,673,741,812,756,788,694,701,804,690]}
df = pd.DataFrame(ipl_data)
df.groupby(['Team',"Rank"]).sum()
Run Code Online (Sandbox Code Playgroud)
这是返回。
Points
Team Rank
Devils 2 863
3 673
Kings 1 1544
3 741
4 812
Riders 1 876
2 2173
Royals 1 804
4 701
Run Code Online (Sandbox Code Playgroud)
我如何提取等级等于“1”的值(点),因此 1544+ 876+ 804. 等级等于 2 和 3。
我相信需要DataFrame.xs:
print (df.xs(1, level=1))
Points
Team
Kings 1544
Riders 876
Royals 804
print (df.xs(2, level=1))
Points
Team
Devils 863
Riders 2173
Run Code Online (Sandbox Code Playgroud)
要按多个条件进行选择,请使用切片器:
idx = pd.IndexSlice
print (df.loc[idx[:, [1,2]], :])
Points
Team Rank
Devils 2 863
Kings 1 1544
Riders 1 876
2 2173
Royals 1 804
Run Code Online (Sandbox Code Playgroud)
print (df.loc[idx['Riders', [1,2]], :])
Points
Team Rank
Riders 1 876
2 2173
Run Code Online (Sandbox Code Playgroud)
如果想要按 s 对所有组求和,Rank请将分组列从 更改['Team',"Rank"]为Rank:
s = df.groupby("Rank")['Points'].sum()
print (s)
Rank
1 3224
2 3036
3 1414
4 1513
Name: Points, dtype: int64
Run Code Online (Sandbox Code Playgroud)
如果还需要df1,则使用sumper level=1:
df1 = df.groupby(['Team',"Rank"]).sum()
print (df1)
Points
Team Rank
Devils 2 863
3 673
Kings 1 1544
3 741
4 812
Riders 1 876
2 2173
Royals 1 804
4 701
s1 = df1.sum(level=1)
print (s1)
Points
Rank
2 3036
3 1414
1 3224
4 1513
Run Code Online (Sandbox Code Playgroud)