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

如何合并DataFrame中列名相同的列数据

合并DataFrame中同名列的解决方案

当前数据结构

FIDBRECOMHDBASADFDSRECOMADFDSHDBASHDBAS
ISININE0212INE752INE862INE943INE004INE035INE143
MDat6/30 26/29 226/28 226/16 26/12226/152226/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}")

代码说明

  1. 转置数据:将原始DataFrame转置,让ISIN和MDat成为列,重复的列名(如RECOM、HDBAS)转为行,方便后续分组处理。
  2. 分组处理:对每个唯一列名分组,提取ISIN的前4位作为ISN,从MDat中提取日期部分作为Mdate。
  3. 合并与格式化:将分组后的数据按目标格式合并,最后打印成指定的分隔样式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 21:11:28