在数据框特定行上执行计算,并使用结果进行额外计算
下面提供了一个示例表格(实际上,这个表格会有更多的实验数据、更多的样本,以及不同数量的重复实验):
SujectID Experiment Sample Results
A 1 neg 1
A 1 neg 2
A 1 test-a 123
A 1 test-a 144
A 1 test-b 43
A 1 test-b 54
B 1 neg 42
B 1 neg 45
B 1 test-a 45
B 1 test-a 54
我需要计算某个实验在某个主题下的负值的平均值。然后,我要把这个平均值从该主题下每个测试的平均值中减去。我想把这个结果放到数据表的新一列里,让每个重复实验都能得到这个计算结果。
现在,这个表格的前六行看起来会是这样的:
SujectID Experiment Sample Results Adjusted
A 1 neg 1 0
A 1 neg 2 0
A 1 test-a 123 132
A 1 test-a 144 132
A 1 test-b 43 47
A 1 test-b 54 47
我可以用'groupby'和'mean'来做其中的一部分,但我不太确定怎么把这些值再放回到这个表格里。
dataframe.groupby(['SubjectId', 'Experiment', 'Sample']).mean()
我也可以用一个python字典来实现这个,但看起来用pandas会更合适,因为我有一个很大的表格。
1 个回答
1
一种方法是,在进行分组操作之前,先把你的数据框(dataframe)过滤,只保留负样本。然后再用merge
把这些负样本和你更大的数据框合并在一起。
neg_sample = df['Sample'] == 'neg'
neg_means = df[neg_sample].groupby(['SujectID', 'Experiment']).mean()
neg_means.columns = ['Adj']
df = df.merge(neg_means, how='left', left_on=['SujectID','Experiment'], right_index=True)
df['Adjusted'] = df['Results'] - df['Adj']