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

Pandas Resample聚合时未返回指定on列的问题

解决Pandas新版本resample后日期列变索引的问题

问题原因

Pandas 2.0+版本对resample的行为做了调整:当指定on参数时,该时间列会自动成为结果的DatetimeIndex,不再作为普通列保留,所以你没法用d['Date In']直接访问。

单统计流入量的解决办法

如果只需要统计每月流入量,有两种简单方式:

方法1:把索引转回普通列

用reset_index()将DatetimeIndex转成普通列,同时用size()直接计数每月的流入记录数:

inflow = df.resample('M', on='Date In').size().reset_index(name='流入量')
# 此时Date In是普通列,可正常用inflow['Date In']调用

方法2:指定统计目标列

如果习惯用count(),可以只针对Date In列统计,避免结果混入其他列:

inflow = df.resample('M', on='Date In')['Date In'].count().reset_index(name='流入量')

同时统计流入+流出量

要同时得到每月的流入、流出数据,需要分别对两个日期列做resample,再合并结果:

import pandas as pd

# 统计流入量:按Date In分组计数
inflow = df.resample('M', on='Date In').size().reset_index(name='流入量')
# 统计流出量:按Date Out分组计数
outflow = df.resample('M', on='Date Out').size().reset_index(name='流出量')

# 合并数据,按月份对齐,缺失的月份补0
monthly_stats = pd.merge(inflow, outflow, left_on='Date In', right_on='Date Out', how='outer').fillna(0)
# 统一月份列,清理冗余
monthly_stats['月份'] = monthly_stats['Date In'].combine_first(monthly_stats['Date Out'])
monthly_stats = monthly_stats[['月份', '流入量', '流出量']]

额外提示

  • size()比count()更适合做行数统计:count()会忽略空值,size()直接统计分组内总记录数;
  • 如果不想转索引,也可以直接通过d.index访问日期,比如d.index.strftime('%Y-%m')可以格式化成年月字符串;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 22:32:25