如何在一组值中求和,然后从另一个组中获取差异?

时间:2017-12-05 19:38:58

标签: python-3.x pandas group-by pivot difference

假设我有三个变量的简化数据框:

ID    sample  test_result
P1    Normal           9
P1    Normal           18
P2    Normal           7
P2    Normal           16
P3    Normal           2
P3    Normal           11
P1     Tumor           6
P1     Tumor           15
P2     Tumor           5
P2     Tumor           15
P3     Tumor           3
P3     Tumor           12

我想知道如何将每个样本类型中每个相同test_result的{​​{1}}值相加(即IDNormal)。然后我想区分总和正常值和肿瘤Tumor值之间的差异。

我尝试在sample列上使用groupby,然后在test_result列上使用diff()方法,但这不起作用。我想我首先需要知道如何应用.sum(),但不知道如何应用。

以下是我的尝试:

test_result

我期待的输出就像:

df.groupby('sample')['test_result'].diff()

知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:2)

groupbysum一起使用,然后重塑unstack

df = df.groupby(['ID','sample'])['test_result'].sum().unstack()

pivot_table

df = df.pivot_table(index='ID',columns='sample', values='test_result', aggfunc='sum')

然后减去列:

df['new'] = df['Normal'] - df['Tumor']
print (df)
sample  Normal  Tumor  new
ID                        
P1          27     21    6
P2          23     20    3
P3          13     15   -2