提供了下面的示例表(实际上,此表将针对给定主题进行更多实验,更多样本和可变数量的重复):
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'并且'表示',但是我不确定如何将这些值解包回此表。
dataframe.groupby(['SubjectId', 'Experiment', 'Sample']).mean()
我也可以使用python字典来做这件事,但似乎这适合大熊猫,因为我有一张巨大的桌子。
答案 0 :(得分:1)
一种方法 - 在执行分组之前将数据帧过滤为负样本,然后使用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']