Python使用Pandas取相同lon/lat值对的平均值

dxxyhpgq  于 2023-02-17  发布在  Python
关注(0)|答案(1)|浏览(130)

我正在使用一个超大的数据集,在我试图观察的时间跨度(1948 - 1960年)中有大约160万个条目,我的数据集在试图取平均值之前加载到Pandas中的一个例子看起来像this

import pandas as pd
import pyreadr

data = pyreadr.read_r('C:/fileLocation/file.rds')
df = data[None]
df['time'] = pd.to_datetime(df['time'])
df.set_index('time', inplace=True)
df = df['1948':'1960']
print(df.info())

df_groups = df.groupby(['lat', 'lon'])['spei'].mean()
print(df_groups.head())

现在答案是get
输入/输出示例可能类似于follows
我所要做的是取成对的纬度和经度值,并取每对的平均spei值,然后用这些新的对和附加在那对上的spei值创建一个新的Pandas数据框,稍后再标绘出来。相反,我只得到了5行看似随机的纬度和经度值。而不是每个唯一的对与平均spei从所有重复的lon/lat值。我已经使用this post来尝试和帮助得到一些答案,但我还没有能够找到一个修复。
谢谢大家!

lskq00tm

lskq00tm1#

这应该可以解决您的问题:

import pandas as pd

# create sample dataframe
data = {
    'lat': [40.0, 40.0, 41.0, 41.0, 42.0, 42.0],
    'lon': [-105.0, -106.0, -105.0, -106.0, -105.0, -106.0],
    'spei': [-1.2, -0.8, -0.5, -1.1, -1.3, -0.9]
}
df = pd.DataFrame(data)

# group by pairs of latitude and longitude and calculate the mean spei value for each pair
df_groups = df.groupby([df['lat'], df['lon']])['spei'].mean().reset_index()
df_groups.columns = ['lat', 'lon', 'spei_mean']

# print the resulting dataframe
print(df_groups)

该函数返回:

lat    lon  spei_mean
0  40.0 -106.0       -0.8
1  40.0 -105.0       -1.2
2  41.0 -106.0       -1.1
3  41.0 -105.0       -0.5
4  42.0 -106.0       -0.9
5  42.0 -105.0       -1.3

相关问题