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
相关产品推荐
相关产品推荐

