【发布时间】:2021-05-19 04:44:24
【问题描述】:
我有一个数据框 df,每个 id 有一个条目或每个 id 有重叠条目:
start_date | end_date | id | col1 | col2 | ...
2020-10-01 | 2020-10-01 | a | 2 | 3 | ...
2020-10-01 | 2020-10-03 | a | 4 | 5 | ...
2020-10-02 | 2020-10-07 | b | 7 | 8 | ...
2020-10-06 | 2020-10-08 | b | 9 | 10 | ...
2020-10-06 | 2020-10-08 | c | k | p | ...
我需要为每一行创建从 start_date 到 end_date 的天数。
最终结果应如下所示:
date | id | col1 | col2 | ...
2020-10-01 | a | 2 | 3 | ...
2020-10-01 | a | 4 | 5 | ...
2020-10-02 | a | 4 | 5 | ...
2020-10-03 | a | 4 | 5 | ...
2020-10-02 | b | 7 | 8 | ...
2020-10-03 | b | 7 | 8 | ...
2020-10-04 | b | 7 | 8 | ...
2020-10-05 | b | 7 | 8 | ...
2020-10-06 | b | 7 | 8 | ...
2020-10-07 | b | 7 | 8 | ...
2020-10-06 | b | 9 | 10 | ...
2020-10-07 | b | 9 | 10 | ...
2020-10-08 | b | 9 | 10 | ...
2020-10-06 | c | k | p | ...
2020-10-07 | c | k | p | ...
2020-10-08 | c | k | p | ...
我有大约 1000 万行,这种转换需要每天进行多次,所以转换必须很快。我发现的所有解决方案都使用 apply/lambdas,并且在我的 PC 上需要大约 20-30 分钟,这太慢了。
我试过melt+groupby:https://stackoverflow.com/a/57334167/4435175 但是生成的数据框缺少 start_date 和 end_date 之间的日期。
有什么快速的方法吗?
【问题讨论】:
-
melt可以做到吗? -
I have ~10 million rows and this transformation needs to be done multiple times a day,- 不确定是否存在针对此问题的快速 pandas 解决方案 -
@sammywemmy - 哟,
melt+groupby重新索引 -
@sammywemmy - 我喜欢
itertuples喜欢here,但我觉得还是很慢:(