在上一个solution中,我获得了日期格式为 20190101 的“来源”列。 我需要基于“来自”列添加“至”列。 范围基本上是这样的:
从20190101到20190114
从20190115到20190131
从20190201到20190215
从20190215到20190228
等
如何自动执行此操作?
如何将数据视为日期并对其进行操作。例如,我有一个日期20181231,我想添加一个日期20181231 + 1 = 20190101
答案 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