【问题标题】:If / Else flow control in pandas dataframe熊猫数据框中的 if / Else 流控制
【发布时间】:2018-05-05 15:42:54
【问题描述】:

我是 python 新手,正在研究逻辑语句。 我的目标是按球队计算进球得分。 (即如果一支球队进球,我将分配 1,而对手将被分配 -1)。下面是数据的快照。 Data is below

我写的逻辑语句如下:

if data['team']== data['hometeam_team1']:
   data['run_score'] = 1
else:
    data['run_score'] = -1

但它给我带来了价值错误:

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

谁能给点建议? 非常感谢您的帮助。 谢谢 昂

【问题讨论】:

  • 请不要将您的数据作为图片发布。将其作为文本发布在代码块中,以便人们可以复制和粘贴它以尝试重现您的问题。
  • 请提供Minimal, Complete, and Verifiable example。您可以创建一个可运行的脚本,其中只有几行和几列来演示该问题。然后我们可以编辑该示例并发布解决方案。
  • 我认为这里的问题是data['team'](以及data['hometeam_team1'])返回整列而不是列的单个元素,所以它给你一个ValueError,因为它是一个系列而不是单个值。
  • 尊敬的 Jpp, 给您带来的不便,我们深表歉意。这是第一篇文章,我会在以后的文章中记录您的建议。

标签: python python-3.x pandas if-statement dataframe


【解决方案1】:

使用panda 的好处是矢量化计算。换句话说,您很少需要使用显式的for 循环或if / else 子句来对每一行执行计算。

相反,您可以对 pd.Series 对象执行计算。在此示例中,一种有效的解决方案是使用numpy.where,它的作用类似于矢量化的if / else 子句:

import numpy as np

data['run_score'] = np.where(data['team']== data['hometeam_team1'], 1, -1)

【讨论】:

    【解决方案2】:

    我不确定这是否可行,因为您没有提供任何数据。但这是用于解决此类问题的通用框架。你可以在这里使用apply函数。

    data['run_score'] = data.apply(lambda row: 1 if row['team'] == row['hometeam_team1'] else -1, axis=1)
    

    【讨论】:

    • 感谢 Yolo 的建议。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-20
    • 1970-01-01
    • 2022-01-02
    • 2016-01-07
    • 1970-01-01
    • 2019-12-15
    • 1970-01-01
    相关资源
    最近更新 更多