gpt4 book ai didi

python - 使用 Pandas 聚合所有数据框行对组合

转载 作者:太空狗 更新时间:2023-10-29 22:18:48 24 4
gpt4 key购买 nike

我使用 python pandas 跨数据帧执行分组和聚合,但我现在想执行特定的行成对聚合(n 选择 2,统计组合)。这是示例数据,我想在其中查看 [mygenes] 中的所有基因对:

import pandas
import itertools

mygenes=['ABC1', 'ABC2', 'ABC3', 'ABC4']

df = pandas.DataFrame({'Gene' : ['ABC1', 'ABC2', 'ABC3', 'ABC4','ABC5'],
'case1' : [0,1,1,0,0],
'case2' : [1,1,1,0,1],
'control1':[0,0,1,1,1],
'control2':[1,0,0,1,0] })
>>> df
Gene case1 case2 control1 control2
0 ABC1 0 1 0 1
1 ABC2 1 1 0 0
2 ABC3 1 1 1 0
3 ABC4 0 0 1 1
4 ABC5 0 1 1 0

最终产品应如下所示(默认应用 np.sum 即可):

                 case1    case2    control1    control2
'ABC1', 'ABC2' 1 2 0 1
'ABC1', 'ABC3' 1 2 1 1
'ABC1', 'ABC4' 0 1 1 2
'ABC2', 'ABC3' 2 2 1 0
'ABC2', 'ABC4' 1 1 1 1
'ABC3', 'ABC4' 1 1 2 1

可以使用 itertools ($itertools.combinations(mygenes, 2)) 轻松获得基因对集,但我不知道如何执行特定<的聚合/strong> 行基于它们的值。谁能建议?谢谢

最佳答案

我想不出一个聪明的矢量化方法来做到这一点,但除非性能是真正的瓶颈,否则我倾向于使用最简单的有意义的方法。在这种情况下,我可能会 set_index("Gene") 然后使用 loc 来挑选行:

>>> df = df.set_index("Gene")
>>> cc = list(combinations(mygenes,2))
>>> out = pd.DataFrame([df.loc[c,:].sum() for c in cc], index=cc)
>>> out
case1 case2 control1 control2
(ABC1, ABC2) 1 2 0 1
(ABC1, ABC3) 1 2 1 1
(ABC1, ABC4) 0 1 1 2
(ABC2, ABC3) 2 2 1 0
(ABC2, ABC4) 1 1 1 1
(ABC3, ABC4) 1 1 2 1

关于python - 使用 Pandas 聚合所有数据框行对组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29777702/

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