如何在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
相关产品推荐
相关产品推荐

