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

Pandas循环中按月汇总% Change列值的问题求助

问题分析与解决

错误原因拆解

  1. 第一个循环执行两次的问题
    你写的month=("10")并不是元组,Python里单元素元组必须加逗号,比如month=("10",)。不加逗号的话,("10")等价于字符串"10",len(month)会返回2(因为"10"有两个字符),所以循环跑了两次,每次都用整个字符串"10"去匹配,自然两次结果完全一样。

  2. 第二个循环总和为0的问题
    当month=("10","11")时,你的循环条件写的是Ticker_Ch['Date'].dt.strftime('%m') == month——这里是拿日期字符串和元组("10","11")做比较,字符串永远不可能等于元组,所以筛选出的df2是空DataFrame,求和自然是0.0。你应该用month[x]来获取当前循环的单个月份值。

修正后的循环代码

如果一定要用循环实现,代码应该改成这样:

# 定义1-12月的字符串格式列表,更直观
months = ["01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"]
cum_month = [0.0]*12  # 初始化全0列表,索引0对应1月,完美匹配需求

for idx, month in enumerate(months):
    # 筛选当前月份的数据
    df_month = Ticker_Ch[Ticker_Ch['Date'].dt.strftime('%m') == month]
    # 计算总和并赋值到对应位置
    cum_month[idx] = df_month['% Change'].sum()

print(cum_month)

更高效的Pandas原生方案(推荐)

你的数据最多有200万行,用循环效率极低,Pandas的向量化分组操作速度快得多:

# 提取月份(1-12的整数),按月份分组求和
monthly_sum = Ticker_Ch.groupby(Ticker_Ch['Date'].dt.month)['% Change'].sum()

# 生成1-12月的完整列表,无数据的月份自动补0
cum_month = [monthly_sum.get(i, 0.0) for i in range(1, 13)]
print(cum_month)

这个方法利用Pandas内部优化,比循环快几个数量级,完全适配大数据量场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 23:03:07