Python 熊猫:如何每周汇总数据?
我有一个熊猫数据框,看起来如下所示:Python 熊猫:如何每周汇总数据?,python,pandas,Python,Pandas,我有一个熊猫数据框,看起来如下所示: df date lat lon val 0 2010-09-01 38.5437 -9.50659 6 1 2010-09-02 38.5437 -9.50659 3 2 2010-08-10 38.5437 -9.50659 1 3 2010-08-11 38.5437 -9.50659 5 4 2010-08-12 38.5437 -9.50659 6
df
date lat lon val
0 2010-09-01 38.5437 -9.50659 6
1 2010-09-02 38.5437 -9.50659 3
2 2010-08-10 38.5437 -9.50659 1
3 2010-08-11 38.5437 -9.50659 5
4 2010-08-12 38.5437 -9.50659 6
df
month week lat lon val
0 2010-09 1 38.5437 -9.50659 4.5
4 2010-08 2 38.5437 -9.50659 4
对于lat
和lon
的每个值,我希望每周都有val
的平均值
例如,我想要如下内容:
df
date lat lon val
0 2010-09-01 38.5437 -9.50659 6
1 2010-09-02 38.5437 -9.50659 3
2 2010-08-10 38.5437 -9.50659 1
3 2010-08-11 38.5437 -9.50659 5
4 2010-08-12 38.5437 -9.50659 6
df
month week lat lon val
0 2010-09 1 38.5437 -9.50659 4.5
4 2010-08 2 38.5437 -9.50659 4
这是我试图做的第一步,但我得到了一个错误
df = df.resample('W', on='date')['val'].mean().reset_index(drop=True)
DataError: No numeric types to aggregate
或
首先将
val
转换为数字,然后删除[]
周围的'lat',lon'
:
df['val'] = pd.to_numeric(df['val'])
df['date'] = pd.to_datetime(df['date'])
df = (df.groupby(['lat', 'lon', pd.Grouper(key='date', freq='W-MON')])['val']
.mean()
.reset_index())
print (df)
lat lon date val
0 38.5437 -9.50659 2010-08-16 4.0
1 38.5437 -9.50659 2010-09-06 4.5
如果需要月份周期和一年中的一周:
df = df.groupby([df['date'].dt.to_period('m').rename('month'),
df['date'].dt.isocalendar().week.rename('week'),
'lat', 'lon'])['val'].mean().reset_index()
print (df)
month week lat lon val
0 2010-08 32 38.5437 -9.50659 4.0
1 2010-09 35 38.5437 -9.50659 4.5