Python 每周周一重新取样
我想按id和日期对每周(星期一)独立聚合的两列进行求和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
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