像这样的df的正确方法是什么:
>>>df
treatment mutation_1 mutation_2 resistance frequency
0 a hpc abc 1.2 3
1 a awd jda 2.1 4
2 b abc hpc 1.2 5
对此:
mutation_1 mutation_2 resistance frequency_a frequency_b
0 hpc abc 1.2 3 5
1 awd jda 2.1 4 0
请注意,列a & b
中的顺序无关紧要。
编辑:为清楚起见,在我的示例中更改了列名称
编辑2:我添加了阻力列,这对我来说很重要。
首先,您要对感兴趣的列进行水平排序,然后透视:
cols = ['mutation_1','mutation_2']
df[cols] = np.sort(df[cols],1)
(df.pivot_table(index=cols,
columns='treatment',
values='frequency')
.rename(columns=lambda x: f'frequency_{x}') # rename as needed
.reset_index()) # reset index to columns
输出:
treatment mutation_1 mutation_2 frequency_a frequency_b
0 abc hpc 3.0 5.0
1 awd jda 4.0 NaN