Python 每周周一重新取样

Python 每周周一重新取样,python,pandas,pandas-resample,Python,Pandas,Pandas Resample,我想按id和日期对每周(星期一)独立聚合的两列进行求和 df = pd.DataFrame({'id':['x2', 'x2', 'x1', 'x1', 'x1'], 'date':['2021-01-03','2021-01-09', '2021-01-02', '2021-01-01', '2021-01-01'], 'distance_europe':[100, 100, 200, 200, 100], 'distanc

我想按id和日期对每周(星期一)独立聚合的两列进行求和

df = pd.DataFrame({'id':['x2', 'x2', 'x1', 'x1', 'x1'],
            'date':['2021-01-03','2021-01-09', '2021-01-02', '2021-01-01', '2021-01-01'],
       'distance_europe':[100, 100, 200, 200, 100],
                'distance_USA': [0, 200, 100, 100, 3]})
预期产出

2020-12-28  x2  100   0
2020-12-28  x1 500   203
2021-01-04  x2  100  200
更新---- 我下面的解决方案运行良好---------

closed='left'
label='left'
一起使用
id
和聚合
sum

df = pd.DataFrame({'id':['x2', 'x2', 'x1', 'x1', 'x1'],
            'date':['2021-01-03','2021-01-09', '2021-01-02', '2021-01-01', '2021-01-01'],
       'distance_europe':[100, 100, 200, 200, 100],
                'distance_USA': [0, 200, 100, 100, 3]})


df['date'] = pd.to_datetime(df['date'])

df = (df.groupby([pd.Grouper(key='date', freq='W-Mon', closed='left', label='left'), 'id'])
       .sum()
       .reset_index())
print (df)
        date  id  distance_europe  distance_USA
0 2020-12-28  x1              500           203
1 2020-12-28  x2              100             0
2 2021-01-04  x2              100           200
您的解决方案是将分组从按
星期日
(W为默认星期日)
更改为
星期一
,参数与上述相同:

df = df.groupby('id').resample('W-Mon', on='date', closed='left', label='left').sum().reset_index()

print (df)
   id       date  distance_europe  distance_USA
0  x1 2020-12-28              500           203
1  x2 2020-12-28              100             0
2  x2 2021-01-04              100           200

非常感谢。但我想我们没有相同的日期。我的一周是星期一。感谢you@direction-答案已编辑。
df = df.groupby('id').resample('W-Mon', on='date', closed='left', label='left').sum().reset_index()

print (df)
   id       date  distance_europe  distance_USA
0  x1 2020-12-28              500           203
1  x2 2020-12-28              100             0
2  x2 2021-01-04              100           200