gpt4 book ai didi

python - Pandas - 每组内匹配的平均值减去不匹配的平均值

转载 作者:太空宇宙 更新时间:2023-11-03 15:17:12 28 4
gpt4 key购买 nike

假设我有一个名为 main_df 的数据框

    tf      organs
1 ALX3 brain,heart
2 ARID5A kidney

并使用名为 ref_df 的引用数据框,

    tf      organ   expression
1 ALX3 brain 2
2 ALX3 heart 5
3 ALX3 kidney 4
4 ARID5A brain 3
5 ARID5A heart 6
6 ARID5A kidney 1

我想向 main_df 添加一列名为 delta 的列,它取 ref_df 中相应值的平均值,并减去该 tf 的剩余值的平均值。所以在第 1 行,它将是

平均值([2,5])-平均值([4])= -0.5

在第 2 行,它将是

平均值([1])-平均值([3,6])= -3.5

使 main_df 现在看起来像这样:

    tf      organs      delta
1 ALX3 brain,heart -0.5
2 ARID5A kidney -3.5

我已经思考这个问题有一段时间了,但我被困住了。我需要使用 pandas 函数 isin() 还是其他函数吗?

最佳答案

第 1 步
ref_df 转换为在我将定义的函数中更易于使用的内容

rdf = ref_df.set_index(['tf', 'organ']).expression.unstack()
rdf

organ brain heart kidney
tf
ALX3 2 5 4
ARID5A 3 6 1

第 2 步
使用split生成正平均值的器官列表。使用difference生成负均值的器官列表。

def delta(row):
p = row.organs.split(',')
n = rdf.columns.difference(p)
return rdf.loc[row.tf, p].mean() - rdf.loc[row.tf, n].mean()

第 3 步
应用 + 分配以生成具有新列的新数据框

main_df.assign(detla=main_df.apply(delta, 1))

tf organs detla
1 ALX3 brain,heart -0.5
2 ARID5A kidney -3.5

关于python - Pandas - 每组内匹配的平均值减去不匹配的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43786722/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com