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

Pandas DataFrame行拼接(新版):指定格式数据转换需求问询

解决思路与代码实现

转换逻辑梳理

要完成从输入到目标格式的转换,核心规则如下:

  • 按ID分组,每个ID对应输出表的一行
  • 对每个ID内的count和priority组合,生成两个列:count_{count}_priority_{priority}_item(存储对应item值)、count_{count}_priority_{priority}_c(存储对应c值)
  • 提取每个ID中c字段带-SS的前缀(如YY-SS提取YY),新增SS_prefix列;无匹配值则留空

代码实现

1. 构建宽表结构

利用pivot方法将长表转换为宽表,并扁平化列名:

import pandas as pd

# 原始数据
data = {
    'ID': [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3],
    'count': [1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,1,1,1,1,2,2,1,1,1,1,2],
    'priority': [1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4,4,3,1,2,3,4,4],
    'item': ['A','B','C','D','A','B','C','D','A','B','C','D','A','B','C','D','A','B','C','D','D','C','A','B','C','D','D'],
    'c': ['XX','XX','XX','XX','YY-SS','YY','YY','YY','YY-SS','YY','YY','YY','XX','XX','XX','XX','ZZ','ZZ','ZZ','ZZ','ZZ','ZZ','TT-SS','ZZ','ZZ','ZZ','ZZ']
}
df = pd.DataFrame(data)

# 透视生成宽表
wide_df = df.pivot(
    index='ID',
    columns=['count', 'priority'],
    values=['item', 'c']
)

# 扁平化列名
wide_df.columns = [f'{val}_count_{cnt}_priority_{prio}' for val, cnt, prio in wide_df.columns]
wide_df = wide_df.reset_index()

2. 提取SS前缀并合并

筛选含-SS的c值,提取前缀后合并到宽表:

# 获取每个ID的SS前缀
ss_prefix = df[df['c'].str.contains('-SS')].groupby('ID')['c'].apply(
    lambda x: x.iloc[0].split('-')[0] if not x.empty else ''
).reset_index(name='SS_prefix')

# 合并得到最终结果
final_df = pd.merge(wide_df, ss_prefix, on='ID', how='left').fillna('')

验证结果

执行代码后,final_df的结构与目标输出完全匹配。可通过final_df.head()查看具体数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 13:35:17