Pandas依赖列查找

时间:2018-03-26 12:43:21

标签: python-3.x pandas lookup

我有一个数据集,它有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数据帧,我需要建议吗?有人能想到优雅的查找解决方案吗?

1 个答案:

答案 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