通过对应的字典值组合 Pandas 列

Posted

技术标签:

【中文标题】通过对应的字典值组合 Pandas 列【英文标题】:Combine Pandas Columns by Corresponding Dictionary Values 【发布时间】:2020-04-28 12:30:58 【问题描述】:

我希望快速合并彼此为genetic complements 的列。我有一个带有计数的大型数据框,并且想要组合列名是补码的列。我目前有一个系统,

获取列名的补码 检查列名的赞美 如果匹配,则将列加在一起 然后删除恭维列

但是,这很慢(检查每个列名)并根据列的顺序给出不同的列名(即在运行之间删除不同的补充列)。我想知道是否有一种方法可以合并字典键:值对来加速过程并保持输出一致。我在下面有一个带有所需结果的示例数据框(ATTG|TAAC 和 CGGG|GCCC 是恭维)。

df = pd.DataFrame("ATTG": [3, 6, 0, 1],"CGGG" : [0, 2, 1, 4], 
"TAAC": [0, 1, 0, 1], "GCCC" : [4, 2, 0, 0], "TTTT": [2, 1, 0, 1]) 

## Current Pseudocode
for item in df.columns():
    if compliment(item) in df.columns():
        df[item] = df[item] + df[compliment(item)]
        del df[compliment(item)]

## Desired Result
df_result = pd.DataFrame("ATTG": [3, 7, 0, 2],"CGGG" : [4, 4, 1, 4], "TTTT": [2, 1, 0, 1]) 

【问题讨论】:

您可能应该提供如何确定补语的逻辑,但至少您可以做到df.groupby(complement, axis=1).sum()。这假定 complement 函数为 item 及其补码返回相同的值(例如,它可以是排序函数)。 嗨@ayhan,感谢您的及时回复。 Compliment 不会为项目及其赞美返回相同的值。 ``` 恭维(“ATTG”) ``` 返回“TAAC”,compliment("TAAC") 返回“ATTG”。不过,我确实认为您对 groupby 有所了解。 【参考方案1】:

翻译列,然后为列分配首先排序的翻译或原件。这使您可以对赞美进行分组。

import numpy as np

mytrans = str.maketrans('ATCG', 'TAGC')
df.columns = np.sort([df.columns, [x.translate(mytrans) for x in df.columns]], axis=0)[0, :]

df.groupby(level=0, axis=1).sum()
#   AAAA  ATTG  CGGG
#0     2     3     4
#1     1     7     4
#2     0     0     1
#3     1     2     4

【讨论】:

这很好用!当列的顺序发生变化时,它甚至可以工作。谢谢@ALollz

以上是关于通过对应的字典值组合 Pandas 列的主要内容,如果未能解决你的问题,请参考以下文章

Pandas:当字典中有多个键时,通过映射添加列

dataframe中stu用法

浅谈python的第三方库——pandas

Python Pandas:通过重复项将列组合在一起,并在相应列中连接字符串

将 pandas Dataframe 列映射到字典值

通过查找多个列值进行合并