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