如何比较同一数据框的两列?

新手上路,请多包涵

我有一个这样的数据框:

  match_id inn1  bat  bowl  runs1 inn2   runs2   is_score_chased
    1     1     KKR  RCB    222  2      82          1
    2     1     CSK  KXIP   240  2      207         1
    8     1     CSK  MI     208  2      202         1
    9     1     DC   RR     214  2      217         1
   33     1     KKR  DC     204  2      181         1

现在我想通过比较 runs1runs2 中的值来更改 is_score_chased 列中的值。如果 runs1>runs2,则行中对应的值应该是 ‘yes’ 否则它应该是 no 。我尝试了以下代码:

 for i in (high_scores1):
  if(high_scores1['runs1']>=high_scores1['runs2']):
      high_scores1['is_score_chased']='yes'
  else:
      high_scores1['is_score_chased']='no'

但它没有用。如何更改列中的值?

原文由 user517696 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 356
2 个回答

您可以更轻松地使用 np.where

 high_scores1['is_score_chased'] = np.where(high_scores1['runs1']>=high_scores1['runs2'],
                                           'yes', 'no')

通常,如果您发现自己在设置列时尝试显式迭代,则有一个像 applywhere 这样的抽象,它们会更快、更简洁。

原文由 miradulo 发布,翻译遵循 CC BY-SA 3.0 许可协议

这是使用 apply 的好例子。

这里 有一个在两列上使用 apply 的例子。

你可以用这个来适应你的问题:

 def f(x):
   return 'yes' if x['run1'] > x['run2'] else 'no'

df['is_score_chased'] = df.apply(f, axis=1)

但是,我建议用布尔值填充你的专栏,这样你就可以让它更简单

def f(x):
   return x['run1'] > x['run2']

并且还使用 lambdas 所以你可以在一行中完成

df['is_score_chased'] = df.apply(lambda x: x['run1'] > x['run2'], axis=1)

原文由 gsmafra 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题