对数据框中的特定行执行计算,并使用结果执行其他计算

时间:2014-08-06 11:56:39

标签: python pandas

提供了下面的示例表(实际上,此表将针对给定主题进行更多实验,更多样本和可变数量的重复):

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字典来做这件事,但似乎这适合大熊猫,因为我有一张巨大的桌子。

1 个答案:

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