gpt4 book ai didi

date - Pandas :如何在偏移日期合并两个数据框?

转载 作者:行者123 更新时间:2023-12-05 03:13:22 24 4
gpt4 key购买 nike

我想根据 df2 的行是否在 df1 的行之后的 3-6 个月的日期范围内合并两个数据帧 df1 和 df2。例如:

df1(我有每家公司的季度数据):

    company DATADATE
0 012345 2005-06-30
1 012345 2005-09-30
2 012345 2005-12-31
3 012345 2006-03-31
4 123456 2005-01-31
5 123456 2005-03-31
6 123456 2005-06-30
7 123456 2005-09-30

df2(对于每家公司,我都有可能在任何一天发生的事件日期):

    company EventDate
0 012345 2005-07-28 <-- won't get merged b/c not within date range
1 012345 2005-10-12
2 123456 2005-05-15
3 123456 2005-05-17
4 123456 2005-05-25
5 123456 2005-05-30
6 123456 2005-08-08
7 123456 2005-11-29
8 abcxyz 2005-12-31 <-- won't be merged because company not in df1

理想的合并 df——df2 中的事件日期在 df1 行中的 DATADATE 之后 3-6 个月(即 1 个季度)的行将被合并:

    company DATADATE    EventDate
0 012345 2005-06-30 2005-10-12
1 012345 2005-09-30 NaN <-- nan because no EventDates fell in this range
2 012345 2005-12-31 NaN
3 012345 2006-03-31 NaN
4 123456 2005-01-31 2005-05-15
5 123456 2005-01-31 2005-05-17
5 123456 2005-01-31 2005-05-25
5 123456 2005-01-31 2005-05-30
6 123456 2005-03-31 2005-08-08
7 123456 2005-06-30 2005-11-19
8 123456 2005-09-30 NaN

我试图通过将开始时间和结束时间列添加到 df1 来应用这个相关主题 [Merge pandas DataFrames based on irregular time intervals],表示 DATADATE 之后的 3 个月(开始时间)到 6 个月(结束时间),然后使用 np.searchsorted(),但这种情况是有点棘手,因为我想逐个公司合并。

最佳答案

这实际上是那些罕见的问题之一,不同的解决方案的算法复杂性可能会有很大不同。您可能想考虑这一点,而不是 1 行代码片段的巧妙之处。

算法上:

  • 根据日期对较大的数据框进行排序

  • 对于较小数据框中的每个日期,使用 bisect在更大的数据框中查找相关行的模块

对于长度分别为 mn 的数据帧 (m < n),复杂度应该是 O(m log( n)).

关于date - Pandas :如何在偏移日期合并两个数据框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30489733/

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