gpt4 book ai didi

python - 重采样多级索引,或沿矩阵/数组的第三维取平均值

转载 作者:太空宇宙 更新时间:2023-11-04 03:27:07 26 4
gpt4 key购买 nike

我将网格化卫星数据存储在数据框中。通常,这个数据框会被切片以每天制作 imshow 图,这是微不足道的。但是,我想绘制数据的年度均值,这是我目前遇到的问题。数据框有一个多级索引(日期时间、纬度坐标),其中的列构成经度坐标。

import pandas as pd, numpy as np

dates = pd.date_range('20140101',periods=10,freq='1D')
others = np.arange(0,5)
index = [(d,o) for o in others for d in dates]
index = pd.MultiIndex.from_tuples(index, names=['DATES','LAT'])
data = np.random.randint(0,20,(50,10))

df = pd.DataFrame(data=data,index=index,columns=np.arange(0,10))
df.columns.names = ['LON']

如果我使用数组,我通常会沿三维堆叠它们,然后在三维上进行平均。例如

mat = np.ones( (5,10,1) )

# stack on day-by-day basis so lat/lon pairs sit on top of each other
# on the third dimension
for heute in df.index.get_level_values(0).unique():
tmp = df.xs(heute, level=0)

mat = np.dstack( (mat,tmp.as_matrix()) )

ave = mat[:,:,1:].mean(axis=2)

虽然这可行,但我怀疑在 Pandas 中有一种方法可以做到这一点。但是,为此我不知道从哪里开始。我玩过 groupby 和 resample,但我一直无法完成这些工作。任何帮助将不胜感激。

最佳答案

开始吧:

import pandas as pd, numpy as np
pd.set_option('display.float_format',lambda x: '{:,.1f}'.format(x))
np.random.seed(1)

dates = pd.date_range('20140101',periods=10,freq='1D')
others = np.arange(0,5)
index = [(d,o) for o in others for d in dates]
index = pd.MultiIndex.from_tuples(index, names=['DATES','LAT'])
data = np.random.randint(0,20,(50,10))

df = pd.DataFrame(data=data,index=index,columns=np.arange(0,10))
df.columns.names = ['LON']

# answer
df = df.stack()
df= df.groupby(level=['LAT','LON']).mean()
print df.unstack(level=['LON'])

产生:

LON    0    1    2    3    4    5    6    7    8    9
LAT
0 8.8 8.5 10.8 9.2 9.0 10.8 9.3 9.3 7.6 9.1
1 10.6 8.5 10.6 12.2 8.0 8.8 9.5 11.3 10.8 9.5
2 11.0 10.3 8.2 11.2 9.9 8.4 13.5 9.7 7.8 9.0
3 8.1 6.2 8.8 12.6 10.6 7.1 8.8 9.3 11.7 10.2
4 9.1 10.1 7.8 8.7 7.4 7.3 10.2 11.9 8.3 11.9

虽然您的数组方法产生:

[[  8.8   8.5  10.8   9.2   9.   10.8   9.3   9.3   7.6   9.1]
[ 10.6 8.5 10.6 12.2 8. 8.8 9.5 11.3 10.8 9.5]
[ 11. 10.3 8.2 11.2 9.9 8.4 13.5 9.7 7.8 9. ]
[ 8.1 6.2 8.8 12.6 10.6 7.1 8.8 9.3 11.7 10.2]
[ 9.1 10.1 7.8 8.7 7.4 7.3 10.2 11.9 8.3 11.9]]

关于python - 重采样多级索引,或沿矩阵/数组的第三维取平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32609527/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com