gpt4 book ai didi

python - 如何在python pandas数据框中将日期范围划分为365天

转载 作者:行者123 更新时间:2023-12-04 08:58:35 24 4
gpt4 key购买 nike

我有一个 Pandas 数据框,其中包含如下所示的数据

import pandas as pd
data = [['0','2018-03-01','2020-04-11'],['1','2017-11-17','2020-11-16'],['2','2017-07-12','2020-07-12']]
df = pd.DataFrame(data,columns=['account_number','contract_start_date','contract_end_date'])
df
enter image description here
我需要使用 contract_start_date 和 contract_end_date 将每个帐户的契约(Contract)分解为 365 天。最后一个时期需要包含剩余的天数。下面是一个例子
enter image description here
到目前为止我尝试过的:
我尝试创建一个新的数据框,并认为我可以使用日期范围生成 365 个周期。它没有像我希望的那样工作。将不胜感激任何指导。
new_df= pd.concat([pd.DataFrame({'start_date': pd.date_range(row.contract_start_date, row.contract_end_date, freq ='365D'),
'account_number': row.account_number
}) for row in df.itertuples()], ignore_index=True)
new_df

最佳答案

有闰年,所以产量不同。
想法由 Series.duplicated 映射到最后一个值新品account_number原作者 contract_end_date并为另一个值添加 365 days :

s1 = pd.to_datetime(df.set_index('account_number')['contract_end_date'])

s2 = new_df['account_number'].map(s1)
s3 = new_df['start_date'] + pd.Timedelta(365, 'd')
mask = new_df['account_number'].duplicated(keep='last')

new_df['contract_end_date'] = np.where(mask, s3, s2)
new_df['days'] = new_df['contract_end_date'] - new_df['start_date']

print (new_df)
start_date account_number contract_end_date days
0 2018-03-01 0 2019-03-01 365 days
1 2019-03-01 0 2020-02-29 365 days
2 2020-02-29 0 2020-04-11 42 days
3 2017-11-17 1 2018-11-17 365 days
4 2018-11-17 1 2019-11-17 365 days
5 2019-11-17 1 2020-11-16 365 days
6 2020-11-16 1 2020-11-16 0 days
7 2017-07-12 2 2018-07-12 365 days
8 2018-07-12 2 2019-07-12 365 days
9 2019-07-12 2 2020-07-11 365 days
10 2020-07-11 2 2020-07-12 1 days

关于python - 如何在python pandas数据框中将日期范围划分为365天,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63682529/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com