合并 pandas 数据框中两列的连续日期

2024-05-02

ID           Order_ID     statr_date            end_date                 Product    Sub_Product 
746              001      08-Oct-2019 0:00:00   *16-Nov-2019 0:00:00*     LPP       Abc
746              002      10-Oct-2019 0:00:00   02-Sep-2020 0:00:00       LPP       Abc
746              003      10-Oct-2019 0:00:00   11-Sep-2020 0:00:00       LPP       Abc
746              004      10-Oct-2019 0:00:00   08-Jan-2021 0:00:00       LPP       Abc
746              005    *16-Nov-2019 0:00:00*   17-Dec-2019 0:00:00       LPP       Abc

在上面的数据集中,我想搜索连续日期,例如从结束日期为 2019 年 11 月 16 日的第一行开始,查找按开始日期计算的连续日期并将它们组合起来。最终输出如下所示:

  ID         Order_ID     statr_date            end_date                 Product    Sub_Product 
746              001      08-Oct-2019 0:00:00   17-Dec-2019 0:00:00       LPP       Abc
746              002      10-Oct-2019 0:00:00   02-Sep-2020 0:00:00       LPP       Abc
746              003      10-Oct-2019 0:00:00   11-Sep-2020 0:00:00       LPP       Abc
746              004      10-Oct-2019 0:00:00   08-Jan-2021 0:00:00       LPP       Abc

我该如何去做呢?


您还可以尝试使用 for 循环和df.loc[]

for start in df.statr_date:
    for end in df.end_date:
        if start==end:
            df.loc[df[df.end_date.eq(end)].index, 'end_date'] = df.loc[df[df.statr_date.eq(start)].index, 'end_date']
            df = df.drop(df[df.statr_date.eq(start)].index)


Output:
    ID  Order_ID           statr_date             end_date Product Sub_Product
0  746         1  08-Oct-2019 0:00:00  17-Dec-2019 0:00:00     LPP         Abc
1  746         2  10-Oct-2019 0:00:00  02-Sep-2020 0:00:00     LPP         Abc
2  746         3  10-Oct-2019 0:00:00  11-Sep-2020 0:00:00     LPP         Abc
3  746         4  10-Oct-2019 0:00:00  08-Jan-2021 0:00:00     LPP         Abc

编辑: 这种具有多个 for 循环的解决方案对于大数据来说性能不太友好

# Input Data
   ID  Order_ID           statr_date             end_date Product Sub_Product
0  746         1  08-Oct-2019 0:00:00  16-Nov-2019 0:00:00     LPP         Abc
1  746         2  10-Oct-2019 0:00:00  02-Sep-2020 0:00:00     LPP         Abc
2  746         3  10-Oct-2019 0:00:00  11-Sep-2020 0:00:00     LPP         Abc
3  746         4  10-Oct-2019 0:00:00  08-Jan-2021 0:00:00     LPP         Abc
4  746         5  16-Nov-2019 0:00:00  17-Dec-2019 0:00:00     LPP         Abc
5  756         6  11-Oct-2019 0:00:00  05-Sep-2020 0:00:00     LBB         Abc
6  756         7  10-Nov-2019 0:00:00  11-Dec-2020 0:00:00     LBB         Abc
7  766         8  22-Oct-2019 0:00:00  19-Nov-2019 0:00:00     LBB         Abc
8  766         9  19-Nov-2019 0:00:00  27-Dec-2019 0:00:00     LBB         Agn


g = df.groupby(['ID','Product', 'Sub_Product'])

dfs = []
for group in g.groups:
    df1 = g.get_group(group)
    for start in df1.statr_date:
        for end in df1.end_date:
            if start==end:
                df1.loc[df1[df1.end_date.eq(end)].index, 'end_date'] = df1.loc[df1[df1.statr_date.eq(start)].index, 'end_date']
                df1 = df1.drop(df1[df1.statr_date.eq(start)].index)
    
    dfs.append(df1)                

out = pd.concat(dfs).reset_index()
out

Output:

   index   ID  Order_ID           statr_date             end_date Product  \
0      0  746         1  08-Oct-2019 0:00:00  17-Dec-2019 0:00:00     LPP   
1      1  746         2  10-Oct-2019 0:00:00  02-Sep-2020 0:00:00     LPP   
2      2  746         3  10-Oct-2019 0:00:00  11-Sep-2020 0:00:00     LPP   
3      3  746         4  10-Oct-2019 0:00:00  08-Jan-2021 0:00:00     LPP   
4      5  756         6  11-Oct-2019 0:00:00  05-Sep-2020 0:00:00     LBB   
5      6  756         7  10-Nov-2019 0:00:00  11-Dec-2020 0:00:00     LBB   
6      7  766         8  22-Oct-2019 0:00:00  19-Nov-2019 0:00:00     LBB   
7      8  766         9  19-Nov-2019 0:00:00  27-Dec-2019 0:00:00     LBB   
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

合并 pandas 数据框中两列的连续日期 的相关文章

随机推荐

  • 为什么界面构建器不能使用 UIView 的具体通用子类?

    首先 这已被投票关闭 作为为什么不能直接在 Interface Builder 中使用泛型的重复 TLDR 的答案是 IB 使用 Objective C 而 Objective C 不支持泛型 无论如何 没有办法指定泛型的 特殊性 即它使用
  • 计算Mac中目录及其子目录的特定文件类型的数量

    I use ls l filetype wc l但它只能查找当前目录中的文件 我怎样才能计算子目录中具有特定扩展名的所有文件 非常感谢 你可以这样做find命令 find name filetype wc l
  • C# - 应用程序的参数

    我怎样才能做到当程序名称末尾添加参数时它会执行特定的方法或其他什么 另外 这个有名字吗 Example 程序 exe i 我也见过 1 这些被称为命令行参数 有一个MSDN 上的很好的教程 http msdn microsoft com e
  • 跨多个表的 JPA 本机查询

    我将以下内容定义为存储库 dispenseRepository 中的本机查询 Query value SELECT p c s d from patient p consult c script s dispense d where p p
  • REST api:在一次获取中请求多个资源[重复]

    这个问题在这里已经有答案了 我正在尝试设计一个 RESTful API 用户可以在单个 GET 请求中获取单个产品或产品列表 每个产品都有一个唯一的 ID 单个产品 URL 非常简单 http mycompany com api v1 pr
  • R:将多列转换为单列[重复]

    这个问题在这里已经有答案了 我有一个看起来像这样的数据框 ID week1 t week1 a week2 t week2 a 1 12 22 17 4 1 15 32 18 5 1 24 12 29 6 2 45 11
  • Git 注释详细信息

    我读了this http git scm com 2010 08 25 notes html and this https github com blog 707 git notes display但仍然认为它们晦涩难懂 目前为止了解到 创
  • 类型不包含“GetProperties”的定义

    我正在将库项目迁移到 net 标准 当我尝试使用System Reflection调用APIType GetProperties 类型不包含 GetProperties 的定义 这是我的project json version 1 0 0
  • 需要有关上下文菜单的建议

    我有一个 XML 布局 其中有两个编辑文本字段 一个用于 标题 另一个用于 故事 当用户在这些文本字段中输入数据并按后退按钮时 该条目将作为标题集保存在列表视图中 列表视图出现在 A1 活动中 现在A1扩展了Activity 每当 长按 列
  • 使用堆属性按排序顺序打印树 (Cormen)

    我对算法理论 来自 Cormen 感到耳目一新 二进制尝试一章中有一个练习 要求 min heap 属性可以用来打印 n 节点的键吗 树在 O n 时间内排序 展示如何做 或解释为什么不做 我想是的 这是可能的 在最小堆中 节点中的元素小于
  • cesium:如何在Cesium中设置不同形状的Z-index?

    如何在Cesium中设置不同形状的Z index 请参阅下面的屏幕截图 我希望圆柱体内的广告牌图标显示在圆柱体上 提前致谢 这并不容易 因为您的圆柱体是实际的 3D 体积 并且您的广告牌位于其中 3D 渲染引擎中没有 CSS 样式的 Z 索
  • 如何以编程方式证明“六度分离”概念?

    我有一个包含 2000 万用户以及这些人之间的联系的数据库 如何证明 六度分离 的概念以最有效的方式在编程中 链接到有关六度分离的文章 http en wikipedia org wiki Six degrees of separation
  • 如何从 ModelState 键中删除前缀?

    例如 有一个Web Api操作方法 public HttpMessageResponse Post UserDto userDto if this ModelState IsValid return this Request CreateE
  • 当替换器使用变量时,如何调用 Regex::replace_all?

    对于下面的代码 我尝试输出输入单词 后跟随机字符串 第一个函数可以编译 但我不想要它 因为它不使用随机字符串 第二个函数会产生编译器错误 我如何解决它 use regex Regex fn main let cd rust ok but i
  • Python 中的数字列表求和[重复]

    这个问题在这里已经有答案了 给定一个数字列表 例如 1 2 3 4 5 我如何计算它们的总和 1 2 3 4 5 我如何计算它们的成对平均值 1 2 2 2 3 2 3 4 2 4 5 2 问题一 要对数字列表求和 请使用sum https
  • 任务返回类型出错 - “x 有错误的返回类型”

    我有一行代码 即 bool stop await Task
  • 如何在 RxJS 中通过 ID 去抖

    我的问题是下一个 我想取消我的应用程序的点赞功能 我使用操作在我的应用程序中进行更改 例如 dispatch likePost 1 gt dispatch type LIKE POST id 1 给出下一个例子 我在时间 0 发送一个操作
  • RabbitMQ Java 客户端自动重新连接

    当我的应用程序失去与 RabbitMQ 的连接时 我将其连接工厂设置为自动尝试并重新连接 ConnectionFactory factory new ConnectionFactory factory setUsername usernam
  • 为什么调用 parseInt 时需要使用基数参数?

    基数实际上意味着什么 为什么我们需要它 parseInt 10 radixValue 您可能并不总是希望将整数解析为以 10 为基数的数字 因此提供基数允许您指定其他数字系统 基数是单个数字的值的数量 十六进制为 16 八进制为 8 二进制
  • 合并 pandas 数据框中两列的连续日期

    ID Order ID statr date end date Product Sub Product 746 001 08 Oct 2019 0 00 00 16 Nov 2019 0 00 00 LPP Abc 746 002 10 O