gpt4 book ai didi

Python pandas 部分折叠二维矩阵

转载 作者:行者123 更新时间:2023-11-28 23:00:32 24 4
gpt4 key购买 nike

我想部分“折叠”一个 DataFrame/matrix 并通过仅对压缩值求和来保持结构完整。例如,我有这个:

CHROM     POS     GENE     DESC     JOE      FRED   BILLY    SUSAN    TONY
10 1442 LOXL4 bad 1 0 0 1 0
10 335 LOXL4 bad 1 0 0 0 0
10 3438 LOXL4 good 0 0 1 0 0
10 4819 PYROXD2 bad 0 1 0 0 0
10 4829 PYROXD2 bad 0 1 0 1 0
10 9851 HPS1 good 1 0 0 0 0

前 4 列是描述符,后 4 列是人物/观察。最终目标是计算每个人每个 GENE 的“好”和“坏”观察总数。因此,我想要这个:

GENE     DESC     JOE      FRED   BILLY    SUSAN    TONY
LOXL4 bad 2 0 0 1 0
LOXL4 good 0 0 1 0 0
PYROXD2 bad 0 2 0 1 0
HPS1 good 1 0 0 0 0

以下代码折叠了所有单独的观察结果(Joe、Fred 等),我怎样才能将它们分开?我还希望足够灵活以在未来容纳更多的人(保留相同的 4 个描述符列)

mytable.groupby(['GENE','DESC']).size()

最佳答案

就用groupby对象的聚合方法:

In [156]: df
Out[156]:
CHROM POS GENE DESC JOE FRED BILLY SUSAN TONY
0 10 1442 LOXL4 bad 1 0 0 1 0
1 10 335 LOXL4 bad 1 0 0 0 0
2 10 3438 LOXL4 good 0 0 1 0 0
3 10 4819 PYROXD2 bad 0 1 0 0 0
4 10 4829 PYROXD2 bad 0 1 0 1 0
5 10 9851 HPS1 good 1 0 0 0 0

In [157]: grouped = df.groupby(['GENE', 'DESC'])

In [158]: grouped.agg(np.sum) # agg is a shortcut for aggregate
Out[158]:
CHROM POS JOE FRED BILLY SUSAN TONY
GENE DESC
HPS1 good 10 9851 1 0 0 0 0
LOXL4 bad 20 1777 2 0 0 1 0
good 10 3438 0 0 1 0 0
PYROXD2 bad 20 9648 0 2 0 1 0

正如 Daniel Velkow 在评论中提到的,groupby 对象有一些“内置”方法用于简单的聚合,如 summean、...(类似于numpy 中的 ufuncs 可用作 numpy 数组的方法)。所以最后一步可以进一步简化为

In [159]: grouped.sum()
Out[159]:
CHROM POS JOE FRED BILLY SUSAN TONY
GENE DESC
HPS1 good 10 9851 1 0 0 0 0
LOXL4 bad 20 1777 2 0 0 1 0
good 10 3438 0 0 1 0 0
PYROXD2 bad 20 9648 0 2 0 1 0

如果想对每一列进行不同的操作,根据docs您可以将 dict 传递给 aggregate

但是我发现没有办法为单个列指定函数并为其他列使用默认值。因此,一种方法是定义自定义聚合函数:

def custom_agg(s, default=np.sum, other={}):
if s.name in other.keys():
return other[s.name](s)
else:
return default(s)

然后通过将函数和参数传递给 agg 来应用它:

In [59]: grouped.agg(custom_agg, default=np.sum, other={'CHROM': np.mean})
Out[59]:
CHROM POS JOE FRED BILLY SUSAN TONY
GENE DESC
HPS1 good 10 9851 1 0 0 0 0
LOXL4 bad 10 1777 2 0 0 1 0
good 10 3438 0 0 1 0 0
PYROXD2 bad 10 9648 0 2 0 1 0

关于Python pandas 部分折叠二维矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11888599/

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