Я бы предложил просто создать новый кадр, используя 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']]
Найдите в исходных столбцах данных те значения, которые не имеют обратного комплимента (здесь может быть лучший способ, но это работает):
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