Оператор If, проверяющий значение в текущей строке и столбце

#python #pandas #dataframe

Вопрос:

Я бы проверил, равна ли текущая строка в столбце «А» red . Вот код, который я пробовал, исходный кадр данных и ожидаемый результат.

Фрейм данных

 
     A      B     Value
0   red     blue    1.2
1   black   red     1.3
2   green   red     2.2
3   red     brown   0.3
4   red     white   0.9
5   violet  red     1.1
 
 for index, row in df.iterrows():
    if row['A'] == 'red':
        df['Value1'] = df['Value']
    else:
        df['Value2'] = df['Value']
 

Выход

 
    A      B       Value    Value1  Value2
0   red    blue    1.2      1.2     1.2
1   black  red     1.3      1.3     1.3
2   green  red     2.2      2.2     2.2
3   red    brown   0.3      0.3     0.3
4   red    white   0.9      0.9     0.9
5   violet red     1.1      1.1     1.1
 

Ожидаемый Результат

 
    A       B       Value   Value1  Value2
0   red     blue    1.2     1.2     NaN
1   black   red     1.3     NaN     1.3
2   green   red     2.2     NaN     2.2
3   red     brown   0.3     0.3     NaN
4   red     white   0.9     0.9     NaN
5   violet  red     1.1     NaN     1.1
 

df_iterrows() Метод не возвращает ожидаемый результат. Есть ли более быстрый метод, который может выполнить эту задачу?

Комментарии:

1. iloc предназначен для расположения индексов (числовые значения, начинающиеся с 0). A похоже, это loc А. Кроме того, это будет расположение индекса A , а не столбец A .

2. Где вы указываете «текущую строку»?

Ответ №1:

Если вы хотите проверить каждую строку столбца, чтобы после этого сделать некоторые #code :

 for row in df.iterrows():
   if t==row['A']:
     #code
 

Если вы только хотите знать, в каких строках df['A'] значение элемента равно t:

 df.loc[df['A']==t, 'A']
 

или

 df['A'].astype(str).str.contains('t')
 

Редактировать

Проверьте, работает ли это для вас:

 df.loc[df['A']=='red','Value1']=df['Value']
df.loc[df['A']!='red','Value2']=df['Value']
 

Комментарии:

1. Я попытался df.iterrows , но не вернул ожидаемый результат. Проверьте почту.

2. Да! Это то, что я ищу, спасибо!

Ответ №2:

Вы не можете использовать if операторы on pandas dataframe , так как они имеют разные результаты для разных строк. Вам нужно сделать:

df.loc[df['A'] == t, some_col] = some_value

И это изменит значение в some_col some_value , в строках, где находится значение в столбце A t .