Как добавить значения в два столбца на основе состояния третьего столбца в pandas?

Я хочу добавить x = 0 и y = 1,30 или 1,60 в зависимости от значения столбца «Лечение». В настоящее время я добавляю только одно из двух значений y (в этом примере 1,60), но это не совсем правильно, так как значение должно быть 1,30 для обработки «White_FR».

Это датафрейм

df_tot

       Treatment        y        x     Individual 
0       White       21.982733   800   Data20210608
1       White       21.973003   800   Data20210508  
2       White       21.968242   800   Data20210408  
15      White_FR    22.139293   800   Data20210608  
16      White_FR    22.159840   800   Data20210508  
17      White_FR    22.162254   800   Data20210408  

Я хотел бы получить что-то вроде:

df_tot_new

       Treatment        y        x     Individual 
        White       21.982733   800  Data20210608
        White       1.60        0    Data2021608  #new
        White       21.973003   800  Data20210508   
        White       1.60        0    Data2021608 #new
        White       21.968242   800  Data20210408   
        White       1.60        0    Data2021608 #new
        White_FR    22.139293   800  Data20210608
        White_FR    1.30        0    Data2021608 #new
        White_FR    22.159840   800  Data20210508   
        White_FR    1.30        0    Data2021608 #new
        White_FR    22.162254   800  Data20210408    
        White_FR    1.30        0    Data2021608 #new

Это код:

 df_tot['y'] = df_tot.append([{'y':1.60}, {'x':0}], ignore_index=True)
 

что происходит с колонкой "Индивидуальные"?

enke 16.03.2022 18:58
1
1
25
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В этом случае было бы проще продублировать фрейм данных, изменить копию, а затем объединить их вместе и отсортировать по индексу:

tmp = df.copy()
tmp['y'] = tmp['Treatment'].map({'White': 1.60, 'White_FR': 1.30})
tmp['x'] = 0

df = pd.concat([df, tmp]).sort_index().reset_index(drop=True)

Выход:

>>> df
   Treatment          y    x    Individual
0      White  21.982733  800  Data20210608
1      White   1.600000    0  Data20210608
2      White  21.973003  800  Data20210508
3      White   1.600000    0  Data20210508
4      White  21.968242  800  Data20210408
5      White   1.600000    0  Data20210408
6   White_FR  22.139293  800  Data20210608
7   White_FR   1.300000    0  Data20210608
8   White_FR  22.159840  800  Data20210508
9   White_FR   1.300000    0  Data20210508
10  White_FR  22.162254  800  Data20210408
11  White_FR   1.300000    0  Data20210408

Другие вопросы по теме