2017-02-23 58 views
1

У меня есть dataframe вроде этого:Как сравнить два столбца одного и того же блока данных?

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 

Теперь я хочу, чтобы изменить значение в is_score_chased столбца путем сравнения значений в runs1 и runs2. Если run1> running2, то соответствующее значение в строке должно быть 'yes' else должно быть 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' 

Но это не сработало. Как изменить значения в столбце?

ответ

3

Вы можете с лёгкостью использовать np.where.

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

Как правило, если вы оказываетесь пытается перебирать явно, как вы должны были установить столбец, есть абстракция, как apply или where, которые будут быстрее и более кратким.

+0

Это сработало ... спасибо большое :) – user517696

+0

@ user517696 Добро пожаловать! – miradulo

0

Вам нужно указать, что вы выполняете итерацию через dataframe;

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' 
0

Это хороший пример использования apply.

Here есть пример использования на двух столбцах.

Вы можете адаптировать его к вашему вопросу с этим:

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'] 

А также с помощью лямбды так вы делаете это в одной строке

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

 Смежные вопросы

  • Нет связанных вопросов^_^