首页 > 解决方案 > 根据逻辑更改 DataFrame 列和数据

问题描述

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

[Red_fighter, Blue_fighter, Red_odds, Blue_odds, winner]

我想更改它,例如,如果蓝色的几率“小于”红色的几率,则蓝色被添加到“收藏夹”列中,而红色被添加到“失败者”列中,两者都替换了“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'}

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

标签: pythonpandasdataframedata-analysis

解决方案


您可以使用以下方法实现此目的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),则 is 的所有行都condTrue具有来自的值,A并且 is 的所有行都condFalse具有来自 的值B文档中有更多信息。


推荐阅读