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

如何在Pandas中按州统计阈值日期前的收获面积总和?

问题:按州统计阈值日期前的收割面积总和

我有两个Pandas DataFrame:df(包含各日期、州、收割面积等数据)和lst(存储每个州的日期阈值),需要按州统计df中阈值日期前的area总和,最终得到按州汇总的结果。

数据定义

lst的结构与数据:

import pandas as pd

lst = pd.DataFrame()
lst['ST'] = ['CA', 'MA', 'TX', 'FL', 'OH', 'WY', 'AK']
lst['doy'] = [140, 150, 160, 170, 180, 190, 200]

df的示例数据:

print(df)
            doy  ST  ...          area  left
0           111  AK  ...  4.293174e+05  760964.996900
1           120  AK  ...  4.722491e+06  760535.679500
2           121  AK  ...  8.586347e+06  760149.293900
3           122  AK  ...  2.683233e+07  758324.695200
4           122  AK  ...  2.962290e+07  758045.638900
..          ... ...  ...           ...            ...
111         211  AK  ...  7.609006e+09     107.329336
112         212  AK  ...  7.609221e+09      85.863469
113         213  AK  ...  7.609435e+09      64.397602
114         214  AK  ...  7.609650e+09      42.931735
115         215  AK  ...  7.610079e+09       0.000000

期望输出

area       ST
5.0000e+05      CA
4.0123e+05      MA
3.1941e+05      TX
4.0011e+05      FL
1.2346e+05      OH
87.318e+05      WY
0.7133e+05      AK

解决方案

通过合并匹配阈值→筛选符合条件的记录→分组求和三步即可实现:

# 1. 合并两个DataFrame,为每条记录匹配对应州的日期阈值
merged_df = df.merge(lst, on='ST', suffixes=('', '_threshold'))

# 2. 筛选出doy小于对应州阈值的记录
filtered_df = merged_df[merged_df['doy'] < merged_df['doy_threshold']]

# 3. 按州分组求和,整理成目标格式
result = filtered_df.groupby('ST')['area'].sum().reset_index()
# 调整列顺序为area在前
result = result[['area', 'ST']]

# 可选:将面积格式化为科学计数法
result['area'] = result['area'].apply(lambda x: f"{x:.4e}")

print(result)

关键说明

  • merge操作自动完成州与阈值的匹配,避免手动映射的误差
  • 筛选条件精准过滤出每个州阈值日期之前的所有记录
  • groupby + sum直接完成按州的面积汇总,reset_index()将分组结果转换为标准DataFrame结构

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 00:50:23