假设我的数据框名为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行中,它将是
mean([2,5]) - mean([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()还是什么?
答案 0 :(得分:1)
第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步
apply
+ assign
使用新列生成新数据框
main_df.assign(detla=main_df.apply(delta, 1))
tf organs detla
1 ALX3 brain,heart -0.5
2 ARID5A kidney -3.5