在日期列与期间列之间进行迭代,直到结束日期;按ID列对结果进行分组。

时间:2018-07-23 23:28:17

标签: python pandas loops datetime

我知道在此网站上也曾提出过类似的问题,但是我看到的其他解决方案并不能真正解决我的问题。

我有此数据:

sample = pd.DataFrame({'CustomerID': ['1', '2', '3', '4', '5', '6'],
           'Date': np.random.choice(pd.Series(pd.date_range('2018-01-01', 
            freq='D', periods=180)), 6),
           'Credits': np.random.uniform(0,1000,6),
           'Credit Days': np.random.uniform(0, 1000, 6),
          }, columns=['Date', 'CustomerID', 'Credits', 'Credit Days'])
sample

对于每个公司,我基本上要添加'Date' + 'Credit Days',然后从该结果日期起再添加'Credit Days',直到结束日期超过2020-01-01。我还想按新数据框中的CustomerID将每个日期分组。

谢谢。

1 个答案:

答案 0 :(得分:0)

您想进行除法,但您正在考虑重复加法。

doomsday = pd.to_datetime('2020-01-01')
time_left = doomsday - sample.Date
ratio = time_left.dt.days / sample['Credit Days']

那给你:

0     0.628771
1     4.563582
2     5.528058
3     0.942857
4     1.071486
5    20.097542

您可以根据需要向上或向下取整,并根据需要将其相乘:

sample.Date + pd.to_timedelta(sample['Credit Days'], 'd') * ratio.round()

哪个给你:

0   2020-12-22 00:20:19.857580800
1   2020-03-09 11:19:03.895536000
2   2020-02-23 10:37:54.541632000
3   2020-02-06 01:26:56.634835200
4   2019-11-18 21:37:24.674937600
5   2019-12-28 13:03:52.781760000

对于groupby,这是一个单独的问题,我相信您可以通过检查已经专门询问过的其他问题来解决。