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

基于click_share_rank实现Pandas DataFrame长表转宽表

解决长转宽格式的高效实现方案

针对1400万行的大数据量,直接用pd.pivot_table易出现内存溢出或格式不符预期的问题,推荐以下两种高效实现方式:

方法一:GroupBy + 聚合展开(内存友好)

通过分组聚合为列表再拆分列的方式,规避pivot操作的高内存开销:

import pandas as pd

# 读取数据时指定紧凑数据类型,大幅降低内存占用
df = pd.read_csv("sourcefile.csv", dtype={
    "department": "category",
    "search_term": "category",
    "sfr": "category",
    "click_share_rank": "int8",
    "click_share": "float32",
    "conversion_share": "float32"
})

# 按分组键排序,确保每组内rank为1、2、3的固定顺序
df = df.sort_values(["department", "search_term", "sfr", "click_share_rank"])

# 分组后将目标字段聚合为列表
grouped = df.groupby(["department", "search_term", "sfr"])[
    ["asin", "clicked_item", "click_share", "conversion_share"]
].agg(list).reset_index()

# 将列表拆分为对应rank的列
rank_cols = [1,2,3]
for col in ["asin", "clicked_item", "click_share", "conversion_share"]:
    for rank in rank_cols:
        grouped[f"{col}_{rank}"] = grouped[col].str[rank-1]
    grouped.drop(col, axis=1, inplace=True)

# 输出结果
grouped.to_csv("desired-output.csv", index=False)

进阶优化:

若内存仍不足,可使用pd.read_csv的chunksize参数分批读取处理,每批完成分组聚合后合并最终结果。

方法二:Pivot + 列名重命名(逻辑直观)

若内存足够支撑,可直接用pivot操作后整理列名:

import pandas as pd

df = pd.read_csv("sourcefile.csv", dtype={"department": "category", "search_term": "category", "sfr": "category"})

# 执行pivot转换
pivoted = df.pivot(
    index=["department", "search_term", "sfr"],
    columns="click_share_rank",
    values=["asin", "clicked_item", "click_share", "conversion_share"]
).reset_index()

# 将多级列名合并为目标格式(如asin_1、asin_2)
pivoted.columns = [f"{col[0]}_{col[1]}" if col[1] != "" else col[0] for col in pivoted.columns]

# 输出结果
pivoted.to_csv("desired-output.csv", index=False)

注意事项:

需确保每组的click_share_rank恰好为1、2、3三个值,否则会出现缺失列或额外列;大数据量下优先推荐方法一。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 09:30:23