#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
.