pandas - 我怎样才能把这段代码变成更惯用的熊猫?
问题描述
有点广泛的问题,但我不确定如何获得有关如何改进此代码的指针。
我有一个包含投注赔率和游戏结果的数据框,我想计算投资于某个团队的支出。
我现在拥有的代码可以工作,但我觉得它忽略了 Pandas 可以做的大部分事情,只是依靠该apply
方法并投入 Python。
这是我的代码:
def compute_payout(odds, amount=1):
if odds < 0:
return amount/(-1.0 * odds/100.0)
elif odds > 0:
return amount/(100.0/odds)
def game_payout(row, team_name):
if row['home_team'] == team_name:
if row['home_score'] > row['away_score']:
return compute_payout(row['home_odds'])
else:
return -1
elif row['away_team'] == team_name:
if row['away_score'] > row['home_score']:
return compute_payout(row['away_odds'])
else:
return -1
payout = df.apply(lambda row: game_payout(row, team_name), axis=1)
任何建议都非常感谢!
解决方案
与由for和for 反转布尔掩码numpy.select
链接的条件一起使用:&
bitwise AND
~
m11 = df['home_team'] == team_name
m21 = df['away_team'] == team_name
m12 = df['home_score'] > df['away_score']
m22 = df['home_score'] < df['away_score']
vals = [df['home_odds'].apply(compute_payout), -1, df['away_odds'].apply(compute_payout), -1]
payout = np.select([m11 & m12, m11 & ~m12, m21 & m22, m21 & ~m22], vals, default=np.nan)
推荐阅读
- reactjs - 选择器 ":global .class" 不是纯的(纯选择器必须至少包含一个本地类或 id)
- css - 具有 position: relative 的元素不应该是正常文档流的一部分吗?
- python - 试图 += 元素到 python 中的自定义数组类将对象设置为无类型
- html - css 图像出现在文本和另一个图像上
- arrays - 在 Swift 中将原始字节数组转换为 Struct
- javascript - BuildBundleMinifier 没有正确翻译我的 JavaScript
- javascript - 我如何在javascript中编写没有for循环的以下代码
- google-compute-engine - 配置 Google Compute Engine VM 入口防火墙规则的问题
- flutter - 使用 URL Launcher 插件时从 Firestore 调用 URL
- informatica - 使用 informatica 动态循环遍历文件夹