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

按日期聚合小时级PNL数据出错求助:分组后仅返回33条结果

问题原因

你用df.date.dt.day作为分组键,只会提取日期中的“日”部分(1-31),这意味着不同年份、不同月份的同一天会被合并到同一组(比如2018-10-16和2023-10-16会被归为一组),所以最终只会得到最多31个分组结果。

另外,直接将groupby(...).sum()的结果赋值给新列,由于聚合结果的索引是日期的“日”(1-31),而原DataFrame的索引是0到43807的整数,两者不匹配,导致大部分行无法匹配到值,最终只有少量行有结果。

正确解决方案

要按完整的年-月-日分组计算每日总pnl,并将结果映射到原DataFrame的每一行,可用以下方法:

方法1:提取完整日期分组 + transform广播结果

# 提取年-月-日的date对象作为分组键,用transform将聚合结果映射到每一行
df['daily_pnl'] = df.groupby(df['date'].dt.date)['pnl'].transform('sum')

方法2:时间戳向下取整到日 + 分组

# 将小时级时间戳向下取整到当天0点,作为分组键
df['daily_pnl'] = df.groupby(df['date'].dt.floor('D'))['pnl'].transform('sum')

方法3:使用pd.Grouper指定时间频率

适合时间序列数据,灵活性更强:

# 通过Grouper指定按日频率分组
df['daily_pnl'] = df.groupby(pd.Grouper(key='date', freq='D'))['pnl'].transform('sum')

以上三种方法都会给原DataFrame的每一行添加上对应的当日总pnl,比如2018-10-16的所有小时行,daily_pnl列都会显示当天所有pnl的总和。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 08:28:21