Pandas等级指数中的应用函数

cgfeq70w  于 2023-02-11  发布在  其他
关注(0)|答案(2)|浏览(111)

我有一个Pandas数据框如下。

df = pd.DataFrame({'team' : ['A', 'B', 'A', 'B', 'A', 'B'],
                   'tiger' : [87, 159, 351, 140, 72, 119],
                   'lion' : [1843, 3721, 6905, 1667, 2865, 1599],
                   'bear' : [1.9, 3.3, 6.3, 2.3, 1.2, 4.1],
                   'points' : [425, 425, 441, 441, 1048, 1048]})

grouped = df.groupby(['points', 'team'])[['tiger', 'lion', 'bear']].median()

print(grouped)

                tiger       lion    bear
points team                             
425    A     87.00000 1843.00000 1.90000
       B    159.00000 3721.00000 3.30000
441    A    351.00000 6905.00000 6.30000
       B    140.00000 1667.00000 2.30000
1048   A     72.00000 2865.00000 1.20000
       B    119.00000 1599.00000 4.10000

我想计算A队和B队在每种动物(老虎、狮子、熊)和分数水平上的差异。A队(87分)和B队(159分)在425分和老虎分之间的差异。我不知道如何用层次指数来计算。它看起来像下面这样。谢谢。

points  tiger  lion     bear
0     425     72  1878  1.40000
1     441   -211 -5238 -4.00000
2    1048     47 -1266  2.90000
jvlzgdj9

jvlzgdj91#

您可以swaplevel和切片:

grouped = (df.groupby(['points', 'team'])[['tiger', 'lion', 'bear']].median()
            .swaplevel()
          )

grouped.loc['A']-grouped.loc['B']

或者使用xs

grouped = df.groupby(['points', 'team'])[['tiger', 'lion', 'bear']].median()

grouped.xs('A', level='team')-grouped.xs('B', level='team')

输出:

tiger    lion  bear
points                     
425     -72.0 -1878.0  -1.4
441     211.0  5238.0   4.0
1048    -47.0  1266.0  -2.9
olqngx59

olqngx592#

grouped.groupby(level=0).apply(lambda dd:dd.diff().tail(1)).droplevel([1,2])

出局

tiger    lion  bear
points                     
425      72.0  1878.0   1.4
441    -211.0 -5238.0  -4.0
1048     47.0 -1266.0   2.9

相关问题