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

如何将Pandas中数组类列展开成行并生成连续日期列?

解决方案

1. 展开数组列

先用explode方法将daily_sales列的数组拆分为单行数据,保留对应月份的起始日期:

from datetime import date
import pandas as pd
import numpy as np

# 原输入数据
data = pd.DataFrame([(date(2022,1,1), np.random.randint(10, size=30)), 
                     (date(2022,2,1),np.random.randint(10, size=30)), 
                     (date(2022,3,1),np.random.randint(10, size=30))], 
                    columns=('month_begin','daily_sales'))

# 拆分数组列并重置索引
data_exploded = data.explode('daily_sales', ignore_index=True)
# 转换数据类型为整数(可选,避免object类型)
data_exploded['daily_sales'] = data_exploded['daily_sales'].astype(int)

2. 生成连续日期

通过分组处理,为每个月份的行生成对应日期:

def assign_dates(group):
    start_date = group['month_begin'].iloc[0]
    # 生成从当月1号开始的连续日期,长度匹配组内数据行数
    date_series = pd.date_range(start=start_date, periods=len(group))
    group['date'] = date_series.date  # 转为date类型,与原字段格式统一
    return group

# 应用分组生成日期
final_data = data_exploded.groupby('month_begin', group_keys=False).apply(assign_dates)

修正月份天数匹配问题

注意2022年2月实际只有28天,原数据中每个月份都用了30个数据会导致日期超出当月范围。如果需要严格对应实际日历,建议调整原数据的数组长度:

# 生成符合实际月份天数的数据源
data_fixed = pd.DataFrame([
    (date(2022,1,1), np.random.randint(10, size=31)),  # 1月31天
    (date(2022,2,1), np.random.randint(10, size=28)),  # 2月28天
    (date(2022,3,1), np.random.randint(10, size=31))   # 3月31天
], columns=('month_begin','daily_sales'))

# 重复拆分和日期生成步骤
data_fixed_exploded = data_fixed.explode('daily_sales', ignore_index=True)
data_fixed_exploded['daily_sales'] = data_fixed_exploded['daily_sales'].astype(int)
final_data_fixed = data_fixed_exploded.groupby('month_begin', group_keys=False).apply(assign_dates)

处理完成后,final_data(或final_data_fixed)将包含连续日期列date和对应每日销售数据的daily_sales列,每行对应一天的记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 10:54:37