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

2024-09-30 08:21:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个这样的数据框:

 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中的值来更改i score\u 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' 

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


Tags: 数据noidismatchdcyesscore
3条回答

您需要引用您正在遍历数据帧的事实,因此

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

你可以更容易地使用^{}

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

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

这是使用apply的好例子。

Here有一个在两列上使用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)

相关问题 更多 >

    热门问题