【问题标题】:Python (2.7) - Simple IF THEN logic considering multiple fieldsPython (2.7) - 考虑多个字段的简单 IF THEN 逻辑
【发布时间】:2019-11-30 23:05:26
【问题描述】:

尝试在 Python 中的 Excel 中执行我可以在 5 秒内完成的事情,但我发现自己非常沮丧。

我的数据如下所示:

        HomeTeam AwayTeam  HomeScore  AwayScore  TotalScore
0        OAK      LAC         26         24          50
1        CHI      DET         20         13          33
2        CIN      BAL         13         49          62
3        CLE      BUF         19         16          35
4         NO      ATL          9         26          35

我想在名为“WINNER”的数据框中创建一个新列。如果 HomeScore > AwayScore,我希望新列 WINNER 等于 HomeTeam 值,ELSE 等于 AwayTeam 值。例如,WINNER 应该 = OAK 在第 0 行,CHI 在第 1 行。

这是我迄今为止所尝试的,但这并没有给我上面需要的结果。

我知道这很简单!请帮忙

#new df
df1 = df[['HomeTeam','AwayTeam','HomeScore','AwayScore','TotalScore']]

df1['winner'] = lambda x : df['HomeTeam'] if (df['HomeScore'] > df['AwayScore']) else df['AwayTeam']

print(df1.head())

【问题讨论】:

  • 查熊猫申请
  • 感谢您的回答,但查找应用并没有让我走得太远。我应该在其他任何特定的地方寻找这样的例子吗?

标签: python pandas dataframe if-statement lambda


【解决方案1】:

假设使用 numpy 是一个选项,您可以执行类似 df['winner'] = np.where(df['HomeScore'] > df['AwayScore'], df['HomeTeam'], df['AwayScore']) 的操作

【讨论】:

  • 更有帮助。感谢您的回复...但是当我尝试 df1['winner'] = np.where(df1['HomeScore'] > df1['AwayScore'], df1.['HomeTeam'], df1.[ 'AwayTeam']) 它的说法无效语法
  • 我很笨 - 这行得通 - 谢谢 - df1['winner'] = np.where(df1['HomeScore'] > df1['AwayScore'], df1['HomeTeam'], df1 ['客队'])
  • 它在没有点的情况下工作吗? df 是一个字典,值通过 df[key] 引用。
【解决方案2】:

你很亲密。试试这个:

df['winner'] = df.apply(lambda x :  \
                    x['HomeTeam'] if (x['HomeScore'] > x['AwayScore']) \
                                  else x['AwayTeam'], axis=1)

【讨论】:

  • KeyError: ('HomeScore', u'occurred at index 0')
  • 您确定您的df 中有一个名为HomeScore 的列吗?
  • 这也有效!只是我愚蠢的另一个例子......我的df是df1而不是df......谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-30
  • 2011-10-31
  • 1970-01-01
  • 2015-08-27
  • 1970-01-01
相关资源
最近更新 更多