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

基于相同经纬度提取PrpSummed数组并计算月度统计的Pandas求助

解决Pandas按经纬度分组提取数组并添加统计列的问题

嗨,我来帮你搞定这个问题!咱们分步骤来,一步步实现你要的效果:

1. 按经纬度分组提取PrpSummed数组

首先,我们可以通过groupby按Lat和Lon对数据分组,再把每个组的PrpSummed转换成数组,就能得到你需要的arrayPrp:

import pandas as pd
import numpy as np

# 假设你的原始数据存储在df这个DataFrame里
arrayPrp = df.groupby(['Lat', 'Lon'])['PrpSummed'].apply(np.array).tolist()

这样arrayPrp就是一个列表,每个元素对应一个经纬度点的PrpSummed数值数组,和你预期的结构完全一致。

2. 定义统计运算函数(以SPI为例)

接下来需要实现你的外部统计逻辑,比如计算SPI。这里我先写一个示例函数,你可以替换成自己的实际计算逻辑——注意要保证函数返回的数组长度和输入的分组数组一致,这样才能对应到原数据的每一行:

def calculate_spi(prp_array):
    # 这里替换成你的真实SPI计算逻辑,示例仅做标准化模拟
    mean_val = np.mean(prp_array)
    std_val = np.std(prp_array)
    # 返回和输入数组长度一致的统计结果
    return (prp_array - mean_val) / std_val

3. 计算统计值并合并回原DataFrame

用groupby的transform方法可以很方便地把统计结果映射回原DataFrame的每一行,自动匹配对应的经纬度分组:

# 对每个经纬度分组应用SPI计算,直接生成新列
df['SPI'] = df.groupby(['Lat', 'Lon'])['PrpSummed'].transform(calculate_spi)

执行完这一步,你的原DataFrame就会新增SPI列,每一行的SPI值都对应其所在经纬度分组的统计结果,和你预期的最终结构完全匹配。

补充:复杂场景的处理方式

如果你的统计运算需要依赖时间序列(比如滑动窗口计算),可以用apply处理每个分组的子DataFrame,灵活性更高:

def process_group(group):
    # 先确保数据按年份月份排序(如果原始数据没排序的话)
    group = group.sort_values(['Year', 'Month'])
    # 在这里执行复杂统计逻辑,比如滚动窗口SPI计算
    group['SPI'] = calculate_spi(group['PrpSummed'].values)
    return group

# 按经纬度分组处理,再合并回原结构
df = df.groupby(['Lat', 'Lon'], group_keys=False).apply(process_group)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:10:14