假设我有三个变量的简化数据框:
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}}值相加(即ID
,Normal
)。然后我想区分总和正常值和肿瘤Tumor
值之间的差异。
我尝试在sample列上使用groupby,然后在test_result列上使用diff()方法,但这不起作用。我想我首先需要知道如何应用.sum(),但不知道如何应用。
以下是我的尝试:
test_result
我期待的输出就像:
df.groupby('sample')['test_result'].diff()
知道如何解决这个问题吗?
答案 0 :(得分:2)
df = df.groupby(['ID','sample'])['test_result'].sum().unstack()
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