根据逻辑更改 DataFrame 列和数据

Changing DataFrame columns and data based on logic

所以我有一个 pandas 数据框,其中包含来自拳击比赛的数据及其获胜几率。它的列是:

[Red_fighter, Blue_fighter, Red_odds, Blue_odds, winner]

我想更改它,例如,如果蓝色的赔率比红色的赔率 'less' 则蓝色被添加到列 'Favourite' 并且红色被添加到 'Underdog' 两者替换 'Red_fighter' 和 'Blue fighter'

[favourite, underdog, favourite_odds, underdog_odds, winner]

所以如果我有:

{'Red_fighter' : 'Tom Jones', 'Blue_fighter' : 'Jack Jackson', 'Red_odds' : 200, 'Blue_odds' : -200 , 'Winner' : 'Blue'}

变成:

{'Underdog' : 'Tom Jones', 'Favourite' : 'Jack Jackson', 'Red_odds' : 200, 'Blue_odds' : -200 , 'Winner' : 'Favourite'}

感谢您提供的任何帮助,我是 pandas 和一般数据分析的新手,谢谢!

您可以使用 pd.Series.where 方法实现此目的:

df['Underdog'] = df.Red_fighter.where(df.Red_odds < df.Blue_odds, df.Blue_fighter)
df['Favourite'] = df.Red_fighter.where(df.Red_odds > df.Blue_odds, df.Blue_fighter)

df['Underdog_odds'] = df.Red_odds.where(df.Red_odds < df.Blue_odds, df.Blue_odds)
df['Favourite_odds'] = df.Red_odds.where(df.Red_odds > df.Blue_odds, df.Blue_odds)

此方法的工作原理是将条件 满足的值替换为另一个系列的值。其余满足条件的值保持不变。

因此,例如,如果我们有 df.A.where(cond, df.B)condTrue 的所有行将具有来自 A 的值以及 cond 为的所有行False 的值来自 Bthe documentation.

中有更多信息