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

Pandas时间序列DataFrame按日期无聚合分组的实现问询

解决方案

要实现按日期维度分组并将A、B列数据收集为列表,可按以下步骤操作:

步骤1:提取日期维度

原数据的timestamp包含时分信息,先提取纯日期部分用于分组:

df4['date'] = df4['timestamp'].dt.date

方法一:通过melt+分组聚合实现

先将宽表转为长表,再按日期和列名分组收集数据:

# 转换为长表,将A、B列转为变量-值对
melted_df = df4.melt(id_vars=['date'], var_name='y', value_name='value')
# 按日期和列名分组,聚合为列表
result = melted_df.groupby(['date', 'y'])['value'].agg(list).reset_index()
# 重命名列匹配目标格式
result = result.rename(columns={'date': 'timestamp', 'value': 'no_name'})

方法二:直接分组后转长表

先按日期分组聚合A、B列为列表,再转换为目标的长表结构:

# 按日期分组,将A、B列分别聚合为列表
grouped_df = df4.groupby('date').agg({'A': list, 'B': list})
# 转换为长表格式
result = grouped_df.unstack().reset_index(name='no_name')
# 调整列名和顺序
result.columns = ['y', 'timestamp', 'no_name']
result = result[['timestamp', 'no_name', 'y']].sort_values('timestamp')

执行以上任一方法后,result即为你需要的结果:

timestamp          no_name  y
0  2022-10-01    [1, 3, 5, 7, 9]  A
1  2022-10-01  [10, 8, 6, 4, 2]  B
2  2022-10-02  [2, 4, 6, 8, 10]  A
3  2022-10-02   [9, 7, 5, 3, 1]  B

原代码错误原因

你之前的groupby('timestamp')是按带时分的完整时间戳分组,而非日期维度,导致分组粒度不符合需求;同时agg内的lambda写法逻辑有误,引发KeyError。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 11:25:18