在数据框特定行上执行计算,并使用结果进行额外计算

0 投票
1 回答
729 浏览
提问于 2025-04-18 16:13

下面提供了一个示例表格(实际上,这个表格会有更多的实验数据、更多的样本,以及不同数量的重复实验):

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

撰写回答