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

使用Pandas计算日期区间平均温湿度时结果重复的问题排查

问题分析与解决

错误原因

  • 循环赋值逻辑错误:你在for循环里每次执行df3["Season avg temp"] = ...时,是把计算得到的单个平均值赋值给整个列,而非当前循环对应的行。循环结束后,所有行都会被最后一次循环的计算结果覆盖,因此所有行的值完全相同。
  • style.format代码无效:df.style.format(...)这类代码仅用于格式化DataFrame的显示样式,不会修改原DataFrame的实际数据,这部分代码可直接删除,不影响计算逻辑。

修正方案

方案一:使用apply逐行计算(推荐,符合Pandas向量化操作习惯)

import pandas as pd

# 读取数据
df = pd.read_csv(r'C:\climate.csv')
df3 = pd.read_csv(r'C:\Flower_weight_Seson.csv')

# 转换日期格式
df['date'] = pd.to_datetime(df.date)
df3['Harvest_date'] = pd.to_datetime(df3.Harvest_date)
df3['Starting_date'] = pd.to_datetime(df3.Starting_date)

# 定义单季平均值计算函数
def calculate_season_avg(row):
    # 筛选当前行时间区间内的气候数据
    time_mask = df['date'].between(row['Starting_date'], row['Harvest_date'])
    avg_temp = df.loc[time_mask, 'temp'].mean()
    avg_humid = df.loc[time_mask, 'humid'].mean()
    return pd.Series([avg_temp, avg_humid], index=['Season avg temp', 'Season avg humid'])

# 应用函数到df3每一行,生成结果列
df3[['Season avg temp', 'Season avg humid']] = df3.apply(calculate_season_avg, axis=1)

方案二:修正循环逻辑,按索引赋值

如果坚持使用循环,需通过索引定位到对应行,避免覆盖整列:

import pandas as pd

df = pd.read_csv(r'C:\climate.csv')
df3 = pd.read_csv(r'C:\Flower_weight_Seson.csv')

df['date'] = pd.to_datetime(df.date)
df3['Harvest_date'] = pd.to_datetime(df3.Harvest_date)
df3['Starting_date'] = pd.to_datetime(df3.Starting_date)

# 先初始化结果列
df3["Season avg temp"] = None
df3["Season avg humid"] = None

# 循环时通过索引定位到当前行赋值
for idx, (harvest_date, starting_date) in enumerate(zip(df3['Harvest_date'], df3['Starting_date'])):
    time_mask = df["date"].between(starting_date, harvest_date)
    df3.loc[idx, "Season avg temp"] = df.loc[time_mask, "temp"].mean()
    df3.loc[idx, "Season avg humid"] = df.loc[time_mask, "humid"].mean()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 12:45:35