根据熊猫的每周数据创建代表4周周期的列

时间:2020-02-11 04:11:06

标签: python pandas

我有一个每周数据的数据框。日期是每周的第一天。数据框如下所示:

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

有人知道如何实现吗?

1 个答案:

答案 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)))