pandas 具有多个索引的DataFrame-哪个组的数字更大?

xoefb8l8  于 2022-11-27  发布在  其他
关注(0)|答案(2)|浏览(109)

使用.groupby(['match_id', 'team']).sum()之后,我得到了这个多索引 Dataframe :

visionScore
match_id        team             
EUW1_5671848066 blue          212
                red           127
EUW1_5671858853 blue          146
                red           170
EUW1_5672206092 blue           82
...                           ...

我如何添加一个新的布尔列来判断蓝队还是红队有更大的visionScore?如果有平局,就认为两队都赢了。

qltillow

qltillow1#

这是可行的:

import pandas as pd

df = pd.DataFrame(
    {"visionScore": [212, 127, 146, 170, 82, 82]},
    index=pd.MultiIndex.from_product([["EUW1_5671848066", "EUW1_5671858853", "EUW1_5672206092"], ["blue", "red"]], names=["match_id", "team"])    
)

df["winner"] = df.groupby("match_id").transform(lambda x: [x[0] >= x[1], x[1] >= x[0]])

# df:
#                       visionScore  winner
# match_id        team                     
# EUW1_5671848066 blue          212    True
#                 red           127   False
# EUW1_5671858853 blue          146   False
#                 red           170    True
# EUW1_5672206092 blue           82    True
#                 red            82    True

虽然我忍不住想有更好的办法。

i5desfxk

i5desfxk2#

我做了一些工作,通过加入 Dataframe 本身并在同一行上获取visionScore,得到了略有不同但仍然足够的结果:

df = df.reset_index(drop=True)
df = df.loc[df['team'] == 'blue'].merge(df.loc[df['team'] == 'red'], on=['match_id'], suffixes=('_blue', '_red'))
df['blueWins'] = df['visionScore_blue'] >= df['visionScore_red']

结果:

blueWins           visionScore_blue visionScore_red
False              156              189
False              83                90
True               142              102
True               185              161
True               147               94
...

相关问题