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

如何在pandas中使用现有列数据创建新行实现列转行

pandas 多批次销售列拆分转为行实现方案

核心逻辑是将不同批次的销售列统一重命名为相同结构后合并,自动过滤空值记录,全程保留原ID和prevenda字段。

实现代码

基础版本(适用于固定少批次场景)

import pandas as pd

# 假设你的原始DataFrame变量名为df
# 1. 提取初始核心售卖数据
df_base = df[["ID", "prevenda", "Product", "Value"]].copy()

# 2. 处理第1批新增销售列,重命名为统一结构,删除全空的无效行
df_batch1 = df[["ID", "prevenda", "Produc01", "Value01"]].rename(
    columns={"Produc01": "Product", "Value01": "Value"}
).dropna(subset=["Product", "Value"], how="all")

# 3. 合并所有数据集得到最终结果
df_result = pd.concat([df_base, df_batch1], ignore_index=True)

通用版本(自动识别所有批次列,适配多批次扩展场景)

如果后续还会新增Produc02/Value02、Produc03/Value03等更多批次列,可以用自动遍历的方式实现:

import pandas as pd

df_list = []
# 先加入核心批次数据
df_list.append(df[["ID", "prevenda", "Product", "Value"]].copy())

# 自动遍历识别所有带数字后缀的销售批次
batch_num = 1
while True:
    prod_col = f"Produc{batch_num:02d}"
    value_col = f"Value{batch_num:02d}"
    # 检测列是否存在,不存在就停止遍历
    if prod_col not in df.columns or value_col not in df.columns:
        break
    # 处理当前批次数据
    tmp_df = df[["ID", "prevenda", prod_col, value_col]].rename(
        columns={prod_col: "Product", value_col: "Value"}
    ).dropna(subset=["Product", "Value"], how="all")
    df_list.append(tmp_df)
    batch_num += 1

# 合并所有批次数据
df_result = pd.concat(df_list, ignore_index=True)

说明

  • 若不需要保留prevenda字段,把代码中列筛选部分的prevenda删掉即可,输出结果和你给出的预期格式完全一致
  • 如果你的批次列命名规则不同(比如为Product_1/Value_1),修改代码中列名拼接的规则即可适配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 10:48:02