我有一个每周数据的数据框。日期是每周的第一天。数据框如下所示:
import pandas as pd
df = pd.DataFrame( {'date': ['2019-12-22', '2019-12-15', '2019-12-08', '2019-12-01',
'2019-11-24', '2019-11-17', '2019-11-10', '2019-11-03',
'2019-10-27', '2019-10-20', '2019-10-13'],
'p': list((df.index+4)//4) })
date p
0 2019-12-22 1
1 2019-12-15 1
2 2019-12-08 1
3 2019-12-01 1
4 2019-11-24 2
5 2019-11-17 2
6 2019-11-10 2
7 2019-11-03 2
8 2019-10-27 3
9 2019-10-20 3
10 2019-10-13 3
我需要在每4周的最后一周创建一个列p2。 还有另一列显示每个期间的日期范围。 如下所示:
date p p1 p2
0 2019-12-22 1 2019-12-22 2019-11-24: 2019-12-22
1 2019-12-15 1 2019-12-22 2019-11-24: 2019-12-22
2 2019-12-08 1 2019-12-22 2019-11-24: 2019-12-22
3 2019-12-01 1 2019-12-22 2019-11-24: 2019-12-22
4 2019-11-24 2 2019-11-24 2019-10-27: 2019-11-24
5 2019-11-17 2 2019-11-24 2019-10-27: 2019-11-24
6 2019-11-10 2 2019-11-24 2019-10-27: 2019-11-24
7 2019-11-03 2 2019-11-24 2019-10-27: 2019-11-24
8 2019-10-27 3 2019-10-27 2019-10-13: 2019-10-27
9 2019-10-20 3 2019-10-27 2019-10-13: 2019-10-27
10 2019-10-13 3 2019-10-27 2019-10-13: 2019-10-27
有人知道如何实现吗?
答案 0 :(得分:0)
根据我的理解,您可以尝试以下操作:
main_container
df['date']=pd.to_datetime(df['date']) #convert to datetime
g = df.groupby('p') # group on column p
df['p1'] =g['date'].transform('max') # gets the last date for the group
df['p2'] = (df['p'].map(g['date'].max().shift(-1)).fillna(g['date'].transform('last'))
.astype(str).add(' : ' + df['p1'].astype(str)))