Как добавить столбец фрейма данных pandas на основе значений других строк

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