我有一个数据集,它有2个条件,2个重复和具有相应值(数量)的样本。我把它读成熊猫数据帧:
condition replicate sample amount
0 1 1 a1 5
1 1 1 a2 2
2 1 2 a1 3
3 1 2 a2 1
4 2 1 b99 7
5 2 1 a2 4
6 2 2 a1 3
7 2 2 a2 2
我想将条件1中每个样本的数量除以条件2中相应样本的数量,如果它们属于同一个复制品(并且具有相同的样本名称)。
换句话说,我想找出样本名称和复制数字在条件之间匹配的金额之间的比率。
在此示例中,输出应类似于:
replicate sample amount
0 1 a1 0.714286
1 1 a2 NaN
2 2 a1 1.000000
3 2 a2 0.500000
如果我应该以不同的方式构建我的数据并且是否最好选择pandas数据帧,我需要建议吗?有人能想到优雅的查找解决方案吗?
答案 0 :(得分:2)
您可以按条件使用unstack
列,然后按dropna
划分列并最后删除所有NaN
行:
df = df.set_index(['sample','replicate','condition'])['amount'].unstack()
df['new'] = df[1].div(df[2])
df = df['new'].unstack().dropna(how='all').stack(dropna=False).reset_index(name='amount')
print (df)
sample replicate amount
0 a1 1 NaN
1 a1 2 1.0
2 a2 1 0.5
3 a2 2 0.5