#python #python-3.x #pandas #dataframe
#python #python-3.x #pandas #фрейм данных
Вопрос:
Я пытаюсь добавить новый столбец и установить его значение на основе значений других строк. Допустим, у нас есть следующий фрейм данных:
df = pd.DataFrame({
'B':[1,2,3,4,5,6],
'C':[7,8,9,4,2,3],
'D':[1,3,5,7,1,0],
})
С этим соответствующим выводом
B C D
1 7 1
2 8 3
3 9 5
4 4 7
5 2 1
6 3 0
Я хочу добавить новый столбец ‘E’, который имеет следующее значение:
E = значение df.C, где B = B 2.
Например, первое значение E должно быть 3 (мы выбираем строку, где B = 0 2 = 2, и выбираем значение C из этой строки).
Я попробовал следующее
f['E'] = np.where(f.B == (f['B'] 2))['C']
Но это не работает
Ответ №1:
Вы можете установить B
и индексировать и использовать это для сопоставления измененных данных:
df['E'] = df['B'].add(2).map(df.set_index('B')['C'])
Вывод:
B C D E
0 0 1 7 3.0
1 1 2 8 4.0
2 2 3 9 5.0
3 3 4 4 6.0
4 4 5 2 NaN
5 5 6 3 NaN
Комментарии:
1. Спасибо, никогда не думал об этом!
2. Можно ли добавить условие? Итак, получается: где B = B 2 и D = значение?
3. может быть, @user3379482
df[df['D']==value].set_index('B')['C']
?