使用Pandas按渠道拆分日期支出数据生成对应新列
用Pandas自动生成各渠道支出列的解决方案
针对需求——将包含日期、渠道、支出的长格式数据集,转换为每个日期对应各渠道支出的宽格式表格,直接用Pandas的pivot或pivot_table方法就能自动完成,无需手动操作。
步骤1:模拟原始数据集(匹配你的数据结构)
import pandas as pd # 模拟和你格式一致的原始数据 df = pd.DataFrame({ '日期': ['2024-01-01', '2024-01-01', '2024-01-01', '2024-01-02', '2024-01-02', '2024-01-02'], '渠道': ['Display', 'search', 'social', 'Display', 'search', 'social'], '支出': [150, 200, 80, 180, 220, 95] })
原始数据样例:
日期 渠道 支出 0 2024-01-01 Display 150 1 2024-01-01 search 200 2 2024-01-01 social 80 3 2024-01-02 Display 180 4 2024-01-02 search 220 5 2024-01-02 social 95
步骤2:核心转换代码
情况1:每个日期-渠道组合唯一(无重复数据)
用pivot快速转换:
# 自动生成Display、search、social三列,对应各日期的支出 result_df = df.pivot(index='日期', columns='渠道', values='支出').reset_index() # 移除自动生成的列名层级,让表头更简洁 result_df.columns.name = None
转换后的期望输出:
日期 Display search social 0 2024-01-01 150 200 80 1 2024-01-02 180 220 95
情况2:存在重复的日期-渠道组合(同一日期同一渠道有多条支出记录)
用pivot_table指定聚合方式(比如求和):
# 对重复的日期-渠道支出值求和,可按需替换为'mean'取平均、'max'取最大值等 result_df = pd.pivot_table( df, index='日期', columns='渠道', values='支出', aggfunc='sum' ).reset_index() result_df.columns.name = None
代码说明
index='日期':以日期作为每行的唯一标识columns='渠道':自动将渠道的不同取值转为单独的列values='支出':用支出字段的数值填充新生成的列reset_index():把日期从行索引转回普通列,符合常规表格格式columns.name = None:删除Pandas自动添加的列名层级,避免表头出现多余的"渠道"标签
内容的提问来源于stack exchange,提问作者S_an
相关产品推荐
相关产品推荐

