如何将开始和结束日期记录转换为时间戳?

时间:2018-05-17 13:34:17

标签: python pandas time-series

例如(输入pandas dataframe):

start_date   end_date  value
0 2018-05-17 2018-05-20      4
1 2018-05-22 2018-05-27     12
2 2018-05-14 2018-05-21      8

我希望它将值除以数据中存在的间隔数(例如2018-05-12到2018-05-27有6天,12/6 = 2),然后创建一个时间序列数据,如以下内容:

date  value
0  2018-05-14      1
1  2018-05-15      1
2  2018-05-16      1
3  2018-05-17      2
4  2018-05-18      2
5  2018-05-19      2
6  2018-05-20      2
7  2018-05-21      1
8  2018-05-22      2
9  2018-05-23      2
10 2018-05-24      2
11 2018-05-25      2
12 2018-05-26      2
13 2018-05-27      2

这是否可以在没有使用pandas的每一行的低效循环的情况下做到这一点?这个方法还有名称吗?

1 个答案:

答案 0 :(得分:1)

您可以使用:

#convert to datetimes if necessary
df['start_date'] = pd.to_datetime(df['start_date'])
df['end_date'] = pd.to_datetime(df['end_date'])

对于按date_range生成Series的每一行生成列表,然后将其长度和groupby除以sum除以:

dfs = [pd.Series(r.value, pd.date_range(r.start_date, r.end_date)) for r in df.itertuples()]
df = (pd.concat([x / len(x) for x in dfs])
        .groupby(level=0)
        .sum()
        .rename_axis('date')
       .reset_index(name='val'))
print (df)
         date  val
0  2018-05-14  1.0
1  2018-05-15  1.0
2  2018-05-16  1.0
3  2018-05-17  2.0
4  2018-05-18  2.0
5  2018-05-19  2.0
6  2018-05-20  2.0
7  2018-05-21  1.0
8  2018-05-22  2.0
9  2018-05-23  2.0
10 2018-05-24  2.0
11 2018-05-25  2.0
12 2018-05-26  2.0
13 2018-05-27  2.0