根据另一个日期列将日期列添加到数据框

时间:2019-10-25 08:40:41

标签: python pandas

在上一个solution中,我获得了日期格式为 20190101 的“来源”列。 我需要基于“来自”列添加“至”列。 范围基本上是这样的:

从20190101到20190114

从20190115到20190131

从20190201到20190215

从20190215到20190228

如何自动执行此操作?

如何将数据视为日期并对其进行操作。例如,我有一个日期20181231,我想添加一个日期20181231 + 1 = 20190101

2 个答案:

答案 0 :(得分:2)

假设您的数据来自链接的问题:

df = pd.DataFrame({'id': {1: 'id_2', 2: 'id_3', 3: 'id_4', 4: 'id_5', 0: 'id_1'},
                   'price': {1: 24.5, 2: 17.5, 3: 149.5, 4: 7.5, 0: 7.5},
                   'code': {1: 'r', 2: 'r', 3: 'c', 4: 'r', 0: 'r'},
                   'from': {1: 20190115, 2: 20190101, 3: 20190115, 4: 20190115, 0: 20190115}})

df["from"] = pd.to_datetime(df["from"],format="%Y%m%d")

df["to"] = df["from"]+pd.DateOffset(days=14)

print (df)

#
     id  price code       from         to
1  id_2   24.5    r 2019-01-15 2019-01-29
2  id_3   17.5    r 2019-01-01 2019-01-15
3  id_4  149.5    c 2019-01-15 2019-01-29
4  id_5    7.5    r 2019-01-15 2019-01-29
0  id_1    7.5    r 2019-01-15 2019-01-29

答案 1 :(得分:1)

与您的示例一样

df:    
        from
0 2019-01-01
1 2019-01-15
2 2019-02-01
3 2019-02-15

您需要从from列中减去1天,然后向后移动fillna

df['to'] = ((df['from'] - pd.DateOffset(1)).shift(-1)
                                           .fillna(df['from'].tail(1) + 
                                                   pd.offsets.MonthEnd(0)))

Out[753]:
        from         to
0 2019-01-01 2019-01-14
1 2019-01-15 2019-01-31
2 2019-02-01 2019-02-14
3 2019-02-15 2019-02-28