python - 使用期间列迭代日期列,直到结束日期;按 id 列对结果进行分组。
问题描述
我知道在这个网站上也有人问过类似的问题,但我看到的其他解决方案并没有真正解决我的问题。
我有这个数据:
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 对每个日期进行分组。
谢谢。
解决方案
你想做除法,但你正在考虑重复加法。
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,这是一个单独的问题,我相信您可以通过检查已经专门提出的其他问题来解决这个问题。
推荐阅读
- python - 类架构:Python中内部类和外部类的循环依赖
- java - 关闭应用程序后,LocationUpdatesForegroundService 应用程序进程仍在运行
- colors - 在odoo10中为状态栏添加颜色
- regex - 使用 RegexBasedLocationExtractionStrategy 定位字符串并使用 iTextSharp 的 PDFstamper 标记图像。标记所有位置的问题
- android - api 一个接一个地调用第一个 Api 响应的基础
- database - Eloquent 模型 - 关系用户类别和帐户处理
- c# - 使用引用项目中已有程序集的 dll
- javascript - 尝试设置 3 个不同的 ngIf 在不同的点击时打开
- python - 在 IPython 中运行 %%cython-magic 单元时,CompileError/LinkerError: "command 'gcc' failed with exit status 1" 是什么意思
- mongodb - 按日期过滤命名键