我有一个polars Dataframe ,其中有两个日期列,分别表示开始日期和结束日期,然后是一个值,我希望在这两个日期之间的所有日期中重复该值,以便可以将它们连接到其他表中。
输入示例为
| 身份证|启动|结束|价值|
| - ------|- ------|- ------|- ------|
| 一百二十三|2022年1月1日|2022年1月4日|十个|
| 美国广播公司|2022年3月4日|2022年3月4日|三个|
| 四百五十六|2022年5月11日|2022年5月16日|四个|
预期输出为
| 身份证|日期|价值|
| - ------|- ------|- ------|
| 一百二十三|2022年1月1日|十个|
| 一百二十三|2022年1月2日|十个|
| 一百二十三|2022年1月3日|十个|
| 一百二十三|2022年1月4日|十个|
| 美国广播公司|2022年3月4日|三个|
| 四百五十六|2022年5月11日|四个|
| 四百五十六|2022年5月12日|四个|
| 四百五十六|2022年5月13日|四个|
| 四百五十六|2022年5月14日|四个|
| 四百五十六|二〇二二年五月十五日|四个|
| 四百五十六|2022年5月16日|四个|
3条答案
按热度按时间n3h0vuf21#
我今天也在为同样的问题而挣扎,我想我可以分享我的解决方案。
正如cbilot已经提到的,pl. dat_range不接受表达式的低值和高值,所以我使用apply解决了这个问题。
数据:
解决方案:
bnl4lu3b2#
从以下数据开始:
算法
一个二个一个一个
逐步
通常,我们使用
date_range
表达式创建日期范围。但是,date_range
不将表达式作为其low
和high
参数。但是,
arange
确实允许表达式作为其low
和high
参数,我们可以(隐式地)将start
和end
日期转换为整数,表示自UNIX纪元以来的天数。结果是一个整数列表,表示
start
和end
日期之间(含)的天数(表示为自UNIX纪元以来的天数)。注意,我们必须向
high
参数添加1,以确保捕获结束日期。接下来,我们可以使用
explode
将每个整数放在单独的行中。最后一步是将
date
列强制转换回pl.Date
,然后只选择所需的列。uyto3xhc3#
我设法在不使用apply的情况下实现了它: