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

Python Pandas:重构虚拟日期列数据为行以适配机器学习模型

解决Pandas中因变量宽格式转长格式以匹配自变量结构的问题

没问题,这是典型的宽表转长表场景,用Pandas的melt()方法就能完美解决,让你的因变量数据结构和自变量对齐,方便后续模型训练。

步骤1:先模拟你的数据(方便你直接测试)

先把你给出的示例数据用Pandas构造出来,这样你可以直接运行代码看效果:

import pandas as pd

# 自变量(长格式:id + month/year 为唯一键)
df_features = pd.DataFrame({
    'id': [0, 0, 1],
    'month/year': ['01/2016', '02/2016', '01/2016'],
    'var_a': [1, 2, 2],
    'var_b': [2, 1, 3]
})

# 因变量(宽格式:每个月份作为列)
df_target = pd.DataFrame({
    'id': [0, 1, 2],
    '01/2016': [1, 1, 0],
    '02/2016': [1, 0, 0]
})

步骤2:将因变量转为长格式

用pd.melt()把宽格式的因变量拆解成和自变量一致的结构:

# 宽表转长表,对齐自变量的id + month/year结构
df_target_long = df_target.melt(
    id_vars='id',  # 保持id列不变
    var_name='month/year',  # 把原月份列名转为这一列的取值
    value_name='target'  # 原单元格的0/1值转为目标变量列
)

转换后的df_target_long结构如下:

idmonth/yeartarget
001/20161
101/20161
201/20160
002/20161
102/20160
202/20160

现在它的结构就和你的自变量完全匹配了:id + month/year 作为唯一组合,每行对应一个时间点的目标值。

步骤3:合并特征和目标变量(可选但推荐)

为了方便后续模型训练,你可以把两个DataFrame按id和month/year合并:

# 左合并保留所有特征行,避免丢失数据
df_combined = pd.merge(df_features, df_target_long, on=['id', 'month/year'], how='left')

如果某些id+month/year在因变量中没有对应值,target列会出现NaN,你可以根据业务需求处理(比如填充0,或者删除这些行)。

额外注意事项

  • 格式一致性:确保因变量的月份列名和自变量的month/year列格式完全一致(比如都是MM/YYYY),如果有差异,可以用pd.to_datetime()统一格式:
    # 统一日期格式为MM/YYYY
    df_features['month/year'] = pd.to_datetime(df_features['month/year'], format='%m/%Y').dt.strftime('%m/%Y')
    df_target.columns = ['id'] + [pd.to_datetime(col, format='%m/%Y').dt.strftime('%m/%Y') for col in df_target.columns[1:]]
    
  • 批量处理月份列:如果你的因变量有很多月份列,不需要手动指定value_vars,melt()会自动把除了id_vars之外的所有列转为值列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:20:13