python - 根据逻辑更改 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'}
感谢您提供的任何帮助,我是熊猫和数据分析的新手,谢谢!
解决方案
您可以使用以下方法实现此目的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 的所有行都cond
将True
具有来自的值,A
并且 is 的所有行都cond
将False
具有来自 的值B
。文档中有更多信息。
推荐阅读
- java - -XDignore.symbol.file 作为 IntelliJ 2020.1 中的编译器选项有什么作用
- android - 该按钮在运行时不可见
- google-bigquery - 选择行范围 BigQuery
- python - 如何将 gst-launcher-1.0 代码更改为 opencv 代码
- sql-server - 如何使用 *DB.Create() 使用 GORM 将数据插入 SQLServer
- google-apps-script - 创建新表单时,如何将其设置为默认添加脚本?
- android - Android Studio - 模拟器卡在黑屏上
- python - 如何在特定文件夹中获取文件名并将该文件名传递给 for 循环索引?
- r - 在R数据框中制作相对于多个因素的数字
- redis - 微服务之间的嵌入式和可复制数据库?