如何根据 pandas 中第三列的条件将值附加到两列?
How can I append values to two columns based on condition of a third column in 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
我想根据列 '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