我想从一个包含订阅开始和结束日期的表中创建一个时间序列。输入表包含订阅的帐户名及其各自的开始日期和结束日期。
input:
accountname startDate endDate
abc 31/12/2020 2/1/2021
xyz 2/1/2021 4/1/2021
pqr 4/1/2021 6/1/2021
stu 2/1/2021 3/1/2021
时间序列的值将是当天活动的accountname
s的计数,即在其各自的开始和结束日期内的accountname
s的计数。
output:
TSDate value (count of active subscriptions)
1/1/2021 1
2/1/2021 3
3/1/2021 2
4/1/2021 2
我可以考虑通过创建一系列日期并每次迭代输入来确定TSdate>endDate。
使用python解决这个问题的正确方法是什么?有什么图书馆我可以利用吗?
我认为您需要首先将值转换为日期时间,然后在列表理解中使用concat
,最后使用Index.value_counts
:
df['startDate']= pd.to_datetime(df['startDate'], dayfirst=True)
df['endDate']= pd.to_datetime(df['endDate'], dayfirst=True)
s = (pd.concat([pd.Series(r.accountname,pd.date_range(r.startDate, r.endDate))
for r in df.itertuples()])
.index
.value_counts()
.sort_index())
print (s)
2020-12-31 1
2021-01-01 1
2021-01-02 3
2021-01-03 2
2021-01-04 2
2021-01-05 1
2021-01-06 1
dtype: int64
如果需要DataFrame:
df1 = s.rename_axis('date').reset_index(name='value')