You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何重构带有成对正反命名列的复杂Pandas DataFrame

Pandas 成对正反列合并实现代码

你可以直接运行以下代码得到目标结果:

import pandas as pd

# 原始数据构造
data4 = {'g_pairs':['an_jk', 'tf_ha', 'ab_rh', 'et_x2','yr_po'],
         'g_a':['en762','en72b','en925','en980','en009'],
         'g_b':['en361','en231','en666','en771','en909'],
         'epi|ap':[0.020,1,0.05,0.7,0.001],
         'ap|epi':[1,1,0.1,0.0001,1],
         'fib|mac':[0.001,0.002,0.0021,0.3,0.005],
         'mac|fib':[0.0002,0.0043,0.0067,0.0123,0.0110]}
df4 = pd.DataFrame(data4)

# 构造正序行表:保留原g_pairs,取正序列值
df_order = df4[['g_pairs', 'g_a', 'g_b', 'epi|ap', 'fib|mac']].copy()

# 构造反序行表:翻转g_pairs,取反序列值并重命名对齐正序表
df_reverse = df4[['g_pairs', 'g_a', 'g_b', 'ap|epi', 'mac|fib']].copy()
# 翻转g_pairs:按下划线拆分后反转再拼接
df_reverse['g_pairs'] = df_reverse['g_pairs'].apply(lambda x: '_'.join(x.split('_')[::-1]))
# 重命名列和正序表保持一致
df_reverse.columns = ['g_pairs', 'g_a', 'g_b', 'epi|ap', 'fib|mac']

# 合并两个表,按g_a、g_b分组排序得到最终结果
df_result = pd.concat([df_order, df_reverse], ignore_index=True)\
             .sort_values(by=['g_a', 'g_b', 'g_pairs'], ignore_index=True)

# 打印验证结果
print(df_result)

代码核心逻辑是把原始表拆成正序、反序两个结构完全一致的子表,再合并排序,不需要复杂的长宽表转换,逻辑清晰不容易出错,运行后输出的结果和你给出的目标结构完全一致。

内容的提问来源于stack exchange,提问作者newbzzs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 23:30:03