如何对Pandas DataFrame按日期聚合并求和cnt字段?
按日期合并小时级自行车租赁数据的正确实现及错误修复
正确实现方法
别用循环折腾,Pandas自带的groupby就能高效搞定,步骤如下:
- 先确保
datetime字段是Pandas的日期类型(如果原始数据是字符串格式的话):
import pandas as pd df['datetime'] = pd.to_datetime(df['datetime'])
- 按日期分组并对
cnt求和,两种常用方式任选:
- 提取纯日期对象作为分组键:
daily_summary = df.groupby(df['datetime'].dt.date)['cnt'].sum().reset_index() # 可选:重命名列让结果更直观 daily_summary.columns = ['date', 'total_daily_cnt']
- 先把datetime向下取整到当天(保留datetime类型,之后再转纯日期也可以):
daily_summary = df.groupby(df['datetime'].dt.floor('D'))['cnt'].sum().reset_index() # 如果要去掉时间部分,转成纯日期格式 daily_summary['datetime'] = daily_summary['datetime'].dt.date
最终得到的daily_summary就是按日期聚合后的结果,每行对应一天的总自行车租赁量。
循环代码报错原因
你碰到的TypeError: can only concatenate str (not "int") to str,大概率是循环里不小心把字符串和整数做了拼接操作:
- 比如你把日期转成了字符串(用
split或strftime之类的方法),然后错误地把这个字符串和cnt(整数类型)直接相加,类似date_str + row['cnt']; - 或者在构建结果字典/列表时,对数据类型处理混乱,把整数当成字符串来拼接。
另外多说一句:循环处理Pandas数据本来就不推荐,不仅容易犯这类低级错误,数据量大的时候速度会慢到离谱,用groupby这种矢量化操作才是正确姿势。
内容的提问来源于stack exchange,提问作者krmbla
相关产品推荐
相关产品推荐

