#python #pandas #dataframe #indexing #variable-assignment
#python #pandas #фрейм данных #индексирование #переменная-назначение
Вопрос:
У меня есть фрейм данных pandas, и я хотел бы добавить столбец и установить определенные значения на основе определенных условий.
Инициализация
Смотрите мой следующий пример:
import numpy as np
import pandas as pd
df=pd.DataFrame(np.reshape(np.arange(20),(5,4)).tolist(),columns=list('ABCD'))
df['E']=''
df.loc[0,'E']=1
df
До сих пор все так, как хотелось. Вывод:
A B C D E
0 0 1 2 3 1
1 4 5 6 7
2 8 9 10 11
3 12 13 14 15
4 16 17 18 19
Проблема
Но теперь я хотел бы установить значение столбца ‘E’ в первой строке, для которого значение ‘B’ больше, чем от 8 до 3 (то же самое, df.loc[2,'E']=1
но с использованием этого условия. Я не знаю, какая это строка априори).
Попытки решения
Я пробовал разные вещи:
df.loc[df['B']>8,'E'].iloc[0]=3
df
Это не меняет никакого значения:
A B C D E
0 0 1 2 3 1
1 4 5 6 7
2 8 9 10 11
3 12 13 14 15
4 16 17 18 19
То же самое справедливо для
df.loc[df['B']>8]['E'].iloc[0]=3
Другие вещи, которые я пробовал, приводят к ошибке. df.loc[df['B']>8,'E']=3
работает хорошо, но я хочу присвоить значение только в первой строке, удовлетворяющей условию, а не во всех строках.
Итак, как мне этого добиться?
Ответ №1:
Использовать .idxmax()
. Поскольку True
это максимальное значение True
/ False
, оно вернет индекс первого True
значения для логического индекса.
df.loc[(df['B']>8).idxmax(),'E']=3
Комментарии:
1. Если я хочу присвоить значение первым трем строкам, есть ли какая-либо функция?
2. @YANGSULIU да, но, пожалуйста, откройте новый вопрос с вашим полным вопросом, включая минимальный воспроизводимый пример. Комментарии к несвязанному ответу — это не то место, где можно получить помощь.