如何根据pandas中第三列的条件将值附加到两列



我想根据"Treatment"列的值添加x=0和y=1.30或1.60。目前,我只附加了y的两个值中的一个(在本例中为1.60(,但这并不完全正确,因为治疗"White_FR"的值应该是1.30。

这是数据帧

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)

在这种情况下,复制数据帧、修改副本,然后将它们连接在一起并按索引排序会更容易:

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

最新更新