如何合并DataFrame中列名相同的列数据
合并DataFrame中同名列的解决方案
当前数据结构
| FIDB | RECOM | HDBAS | ADFDS | RECOM | ADFDS | HDBAS | HDBAS |
|---|---|---|---|---|---|---|---|
| ISIN | INE0212 | INE752 | INE862 | INE943 | INE004 | INE035 | INE143 |
| MDat | 6/30 2 | 6/29 22 | 6/28 22 | 6/16 2 | 6/1222 | 6/15222 | 6/14 |
期望输出格式
REC | HDB | ADF ------------------------------------------------ ISN | Mdate | ISN | Mdate | ISN | Mdate ------------------------------------------------ INE02 6/30 | INE75 6/29 | INE86 6/28 INE94 6/16 | INE03 6/14 | INE00 6/12
实现代码(Pandas)
import pandas as pd # 构造原始DataFrame data = { 'FIDB': ['ISIN', 'MDat'], 'RECOM': ['INE0212', '6/30 2'], 'HDBAS': ['INE752', '6/29 22'], 'ADFDS': ['INE862', '6/28 22'], 'RECOM': ['INE943', '6/16 2'], 'ADFDS': ['INE004', '6/1222'], 'HDBAS': ['INE035', '6/15222'], 'HDBAS': ['INE143', '6/14'] } df = pd.DataFrame(data) # 转置数据,将ISIN/MDat转为列,重复列名转为行 df_transposed = df.set_index('FIDB').T.reset_index(drop=True) # 按列名分组处理数据 groups = {} # 列名映射(匹配期望输出的缩写) col_rename = {'RECOM': 'REC', 'HDBAS': 'HDB', 'ADFDS': 'ADF'} for col in df_transposed.columns.unique(): group = df_transposed[col].copy() # 截取ISIN前4位 group['ISN'] = group['ISIN'].str[:4] # 提取日期部分(去除多余数字) group['Mdate'] = group['MDat'].str.extract(r'(\d+/\d+)')[0] groups[col] = group[['ISN', 'Mdate']].reset_index(drop=True) # 合并分组数据并调整列顺序 final_df = pd.concat( [groups[col].add_prefix(f'{col_rename[col]}_') for col in col_rename.keys()], axis=1 ) final_df = final_df[['REC_ISN', 'REC_Mdate', 'HDB_ISN', 'HDB_Mdate', 'ADF_ISN', 'ADF_Mdate']] # 打印成目标格式 print(" REC | HDB | ADF ") print("------------------------------------------------") print("ISN | Mdate | ISN | Mdate | ISN | Mdate") print("------------------------------------------------") for _, row in final_df.iterrows(): print(f"{row['REC_ISN']:<6} {row['REC_Mdate']:<6} | {row['HDB_ISN']:<6} {row['HDB_Mdate']:<6} | {row['ADF_ISN']:<6} {row['ADF_Mdate']:<6}")
代码说明
- 转置数据:将原始DataFrame转置,让
ISIN和MDat成为列,重复的列名(如RECOM、HDBAS)转为行,方便后续分组处理。 - 分组处理:对每个唯一列名分组,提取
ISIN的前4位作为ISN,从MDat中提取日期部分作为Mdate。 - 合并与格式化:将分组后的数据按目标格式合并,最后打印成指定的分隔样式。
内容的提问来源于stack exchange,提问作者Raj
相关产品推荐
相关产品推荐

