如何使用LOOP循环重构Pandas DataFrame实现成对列翻转合并
实现方案
以下代码完全匹配你需要的循环遍历逻辑,支持上百列的大表场景,只需修改类别列表即可自动适配,无需手动调整拼接逻辑:
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) # 自定义配置:只需修改此处即可适配更多列 type_list = ['ap','epi','fib','mac'] fix_cols = ['g_pairs', 'g_a', 'g_b'] res_buffer = [] # 遍历原始表每一行生成正反两条数据 for _, row in df4.iterrows(): # 生成原始g_pairs对应的正序行 pos_row = row[fix_cols].to_dict() for i in range(0, len(type_list), 2): j = i + 1 pos_col = f"{type_list[j]}|{type_list[i]}" pos_row[pos_col] = row[pos_col] res_buffer.append(pos_row) # 生成翻转g_pairs对应的逆序行 reverse_row = {} left, right = row['g_pairs'].split('_') reverse_row['g_pairs'] = f"{right}_{left}" reverse_row['g_a'] = row['g_a'] reverse_row['g_b'] = row['g_b'] for i in range(0, len(type_list), 2): j = i + 1 pos_col = f"{type_list[j]}|{type_list[i]}" reverse_col = f"{type_list[i]}|{type_list[j]}" reverse_row[pos_col] = row[reverse_col] res_buffer.append(reverse_row) # 转换为最终DataFrame res_df = pd.DataFrame(res_buffer)
运行后输出结果与你预期完全一致:
g_pairs g_a g_b epi|ap fib|mac 0 an_jk en762 en361 0.0200 0.0010 1 jk_an en762 en361 1.0000 0.0002 2 tf_ha en72b en231 1.0000 0.0020 3 ha_tf en72b en231 1.0000 0.0043 4 ab_rh en925 en666 0.0500 0.0021 5 rh_ab en925 en666 0.1000 0.0067 6 et_x2 en980 en771 0.7000 0.3000 7 x2_et en980 en771 0.0001 0.0123 8 yr_po en009 en909 0.0010 0.0050 9 po_yr en009 en909 1.0000 0.0110
内容的提问来源于stack exchange,提问作者newbzzs
相关产品推荐
相关产品推荐

