因此,我被困在如何处理pandas中的数据操作技术上。我下面有一个示例数据帧,每行有25个计数之和。我想按相反的互补顺序合并列名。
AA CC GG AT TT
4 7 0 9 5
3 8 5 5 2
8 6 2 8 1
列"AA“和"TT”与"CC“和"GG”是互不相容的。
AA/TT CC/GG AT
9 7 9
5 13 5
9 8 8
如何匹配列名的反向互补并将其与另一列的名称合并。
注意:我已经有了一个函数来查找字符串的反向恭维
发布于 2018-09-13 07:45:38
我建议使用pd.concat
创建一个新的框架
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
更广泛地说,您可以在列表理解中完成它。给出相反的恭维:
reverse_compliments = [['AA','TT'], ['CC','GG']]
在原始dataframe列中找到那些不在反向称赞中的值(这里可能有一个更好的方法,但这个方法是有效的):
reverse_compliments.append(df.columns.difference(
pd.np.array(reverse_compliments)
.flatten()))
并使用带有列表理解的pd.concat
:
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
https://stackoverflow.com/questions/52304699
复制相似问题