首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Pandas通过反向互补字符串合并列

Pandas通过反向互补字符串合并列
EN

Stack Overflow用户
提问于 2018-09-13 07:22:00
回答 1查看 166关注 0票数 0

因此,我被困在如何处理pandas中的数据操作技术上。我下面有一个示例数据帧,每行有25个计数之和。我想按相反的互补顺序合并列名。

代码语言:javascript
复制
   AA CC GG AT TT

    4  7  0  9  5
    3  8  5  5  2
    8  6  2  8  1

列"AA“和"TT”与"CC“和"GG”是互不相容的。

代码语言:javascript
复制
   AA/TT CC/GG AT 

    9     7     9
    5     13    5
    9     8     8

如何匹配列名的反向互补并将其与另一列的名称合并。

注意:我已经有了一个函数来查找字符串的反向恭维

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-13 07:45:38

我建议使用pd.concat创建一个新的框架

代码语言:javascript
复制
new_df = pd.concat([df[['AA', 'TT']].sum(1).rename('AA/TT'),
                    df[['CC', 'GG']].sum(1).rename('CC/GG'),
                    df['AT']], axis=1)

>>> new_df
   AA/TT  CC/GG  AT
0      9      7   9
1      5     13   5
2      9      8   8

更广泛地说,您可以在列表理解中完成它。给出相反的恭维:

代码语言:javascript
复制
reverse_compliments = [['AA','TT'], ['CC','GG']]

在原始dataframe列中找到那些不在反向称赞中的值(这里可能有一个更好的方法,但这个方法是有效的):

代码语言:javascript
复制
reverse_compliments.append(df.columns.difference(
    pd.np.array(reverse_compliments)
    .flatten()))

并使用带有列表理解的pd.concat

代码语言:javascript
复制
new_df = pd.concat([df[x].sum(1).rename('/'.join(x)) for x in reverse_compliments],
                   axis=1)

>>> new_df
   AA/TT  CC/GG  AT
0      9      7   9
1      5     13   5
2      9      8   8
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52304699

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档