熊猫:如何按 groupby 值求和

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。

jez*_*ael 4

我相信需要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)