具有日期范围列的内部联接熊猫数据框

萨希尔·普里(Sahil Puri)

我有2个带有日期范围的数据框

>>>>df1 = pd.DataFrame({'ID': ['a', 'a', 'a', 'a', 'b', 'b', 'b'],
          'from_dt':[pd.to_datetime('2004-01-01 00:00:00'),
                     pd.to_datetime('2005-01-01 00:00:00'),
                     pd.to_datetime('2007-01-01 00:00:00'),
                     pd.to_datetime('2011-01-01 00:00:00'),
                     pd.to_datetime('2004-01-01 00:00:00'),
                     pd.to_datetime('2012-01-01 00:00:00'),
                     pd.to_datetime('2019-01-01 00:00:00'),
                     ],
         'thru_dt':[pd.to_datetime('2004-12-31 23:59:59'),
                    pd.to_datetime('2006-12-31 23:59:59'),
                    pd.to_datetime('2010-12-31 23:59:59'),
                    pd.to_datetime('2075-12-31 23:59:59'),
                    pd.to_datetime('2011-12-31 23:59:59'),
                    pd.to_datetime('2018-12-31 23:59:59'),
                    pd.to_datetime('2075-12-31 23:59:59'),
                    ],
        'val':[1,2,3,4,5,6,7]})
>>>>df1
  ID    from_dt             thru_dt  val
0  a 2004-01-01 2004-12-31 23:59:59    1
1  a 2005-01-01 2006-12-31 23:59:59    2
2  a 2007-01-01 2010-12-31 23:59:59    3
3  a 2011-01-01 2075-12-31 23:59:59    4
4  b 2004-01-01 2011-12-31 23:59:59    5
5  b 2012-01-01 2018-12-31 23:59:59    6
6  b 2019-01-01 2075-12-31 23:59:59    7

第一个包含ID到Value的映射

>>>>df2 = pd.DataFrame({'ID':['a', 'a', 'b'], 'ID2':['A1', 'A2', 'B1'],
                'from_dt':[pd.to_datetime('2003-01-01 00:00:00'),
                        pd.to_datetime('2010-01-01 00:00:00'),
                        pd.to_datetime('2005-01-01 00:00:00'),
                        ],
                'thru_dt':[pd.to_datetime('2009-12-31 23:59:59'),
                           pd.to_datetime('2075-12-31 23:59:59'),
                           pd.to_datetime('2075-12-31 23:59:59'),
                           ]
                })
>>>>df2
  ID ID2    from_dt             thru_dt
0  a  A1 2003-01-01 2009-12-31 23:59:59
1  a  A2 2010-01-01 2075-12-31 23:59:59
2  b  B1 2005-01-01 2075-12-31 23:59:59

第二个数据帧的一个ID映射到另一个ID。

我想使用一些内部联接逻辑将它们联接起来,以便拥有一个平面文件数据帧,该数据帧具有以下输出

>>>>df3 = some_function(df1, df2, end_date=pd.to_datetime('2020-12-31'))

>>>>df3
  ID2       Date  val
0  A1 2004-01-01    1
1  A1 2004-01-02    1
.
.
x  A1 2004-12-31    1
x  A1 2005-01-01    2
x  A1 2005-01-02    2
.
.
x  A1 2009-12-31    3
x  A2 2010-01-01    3
.
.
x  A2 2020-12-31    4
x  B1 2005-01-01    5
.
.
x  B1 2020-12-31    7

我确定我可以循环并以某种低效的方式执行此操作。我很想学习可以处理此类任务的任何现有工具和库。

谢谢!

耶斯列尔

我认为您可以使用列表理解来展平日期范围,然后按结束日期时间过滤:

s1 = pd.concat([pd.Series(r.Index,pd.date_range(r.from_dt, r.thru_dt)) 
                     for r in df1.itertuples()])
df11 = df1.drop(['from_dt','thru_dt'], 1).join(pd.DataFrame({'Date':s1.index}, index=s1))
df11 = df11[df11['Date'].lt('2020-12-31')]
print (df11)

s2 = pd.concat([pd.Series(r.Index,pd.date_range(r.from_dt, r.thru_dt)) 
                     for r in df2.itertuples()])
df22 = df2.drop(['from_dt','thru_dt'], 1).join(pd.DataFrame({'Date':s2.index}, index=s2))
df22 = df22[df22['Date'].lt('2020-12-31')]
print (df22)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

根据日期列和日期范围填充熊猫数据框

来自分类Dev

从具有多个日期/价格列的数据框中以大熊猫创建面板

来自分类Dev

熊猫合并具有不同日期和列的两个数据框

来自分类Dev

具有内部联接的Laravel范围

来自分类Dev

如何使用python在两列中扩展具有日期范围的数据框?

来自分类Dev

具有多索引列的熊猫数据框-合并级别

来自分类Dev

熊猫枢轴数据框具有不相等的列

来自分类Dev

枢轴熊猫数据框具有多索引列

来自分类Dev

转置具有多列的熊猫数据框

来自分类Dev

具有范围条件的数据框列值

来自分类Dev

在具有不同列名的熊猫中联接两个数据框

来自分类Dev

在熊猫数据框的列中按具有不同标识符的重复日期时间索引进行聚合

来自分类Dev

在熊猫数据框的列中按具有不同标识符的重复日期时间索引进行聚合

来自分类Dev

用列范围扩展熊猫数据框

来自分类Dev

处理具有混合日期格式的Pandas数据框列

来自分类Dev

在R中按日期范围对具有动态日期的数据框进行分组

来自分类Dev

熊猫:在分组数据框中仅在选定列中联接值的有效方法

来自分类Dev

根据日期列熊猫过滤数据框

来自分类Dev

按日期对齐熊猫列数据框

来自分类Dev

从其他具有相似索引的数据框的列创建一个熊猫数据框

来自分类Dev

在具有内部联接的LINQ查询中选择最近的日期

来自分类Dev

mysql数据库内部联接后如何选择具有重复整数的列

来自分类Dev

在数据框熊猫中选择日期范围

来自分类Dev

为熊猫中的特定日期范围过滤数据框

来自分类Dev

如何删除熊猫数据框中的日期范围

来自分类Dev

熊猫数据框基于日期范围的条件累积总和

来自分类Dev

通过装饰器断言熊猫数据框具有日期时间索引

来自分类Dev

比较熊猫数据框行和删除具有重叠日期的行

来自分类Dev

具有不相等元素的熊猫日期时间索引数据框之间的操作

Related 相关文章

  1. 1

    根据日期列和日期范围填充熊猫数据框

  2. 2

    从具有多个日期/价格列的数据框中以大熊猫创建面板

  3. 3

    熊猫合并具有不同日期和列的两个数据框

  4. 4

    具有内部联接的Laravel范围

  5. 5

    如何使用python在两列中扩展具有日期范围的数据框?

  6. 6

    具有多索引列的熊猫数据框-合并级别

  7. 7

    熊猫枢轴数据框具有不相等的列

  8. 8

    枢轴熊猫数据框具有多索引列

  9. 9

    转置具有多列的熊猫数据框

  10. 10

    具有范围条件的数据框列值

  11. 11

    在具有不同列名的熊猫中联接两个数据框

  12. 12

    在熊猫数据框的列中按具有不同标识符的重复日期时间索引进行聚合

  13. 13

    在熊猫数据框的列中按具有不同标识符的重复日期时间索引进行聚合

  14. 14

    用列范围扩展熊猫数据框

  15. 15

    处理具有混合日期格式的Pandas数据框列

  16. 16

    在R中按日期范围对具有动态日期的数据框进行分组

  17. 17

    熊猫:在分组数据框中仅在选定列中联接值的有效方法

  18. 18

    根据日期列熊猫过滤数据框

  19. 19

    按日期对齐熊猫列数据框

  20. 20

    从其他具有相似索引的数据框的列创建一个熊猫数据框

  21. 21

    在具有内部联接的LINQ查询中选择最近的日期

  22. 22

    mysql数据库内部联接后如何选择具有重复整数的列

  23. 23

    在数据框熊猫中选择日期范围

  24. 24

    为熊猫中的特定日期范围过滤数据框

  25. 25

    如何删除熊猫数据框中的日期范围

  26. 26

    熊猫数据框基于日期范围的条件累积总和

  27. 27

    通过装饰器断言熊猫数据框具有日期时间索引

  28. 28

    比较熊猫数据框行和删除具有重叠日期的行

  29. 29

    具有不相等元素的熊猫日期时间索引数据框之间的操作

热门标签

归档