【问题标题】:Python Pandas: How do I look up an index and take corresponding data between two data framePython Pandas:如何查找索引并在两个数据框之间获取相应数据
【发布时间】:2022-01-24 10:16:30
【问题描述】:

我正在尝试收集数据来测试下雨天气对交通拥堵的影响。我有两个不同的数据框:

DF 号1:基于 4 小时的时间范围,这显示了 6 小时区块的拥塞统计数据,其中我用 1/0 表示是否拥堵。

|date_time            | congestion_YN |
|---------------------| ------------- |
|2022/01/03  00:00:00 |  1            |
|2022/01/03  06:00:00 |  1            |
|2022/01/03  12:00:00 |  0            |
|2022/01/03  18:00:00 |  1            |
|2022/01/04  00:00:00 |  0            |
|2022/01/04  06:00:00 |  0            |
...

DF 号2:根据每天的时间范围,显示某一天是否是下雨天,也使用 1/0

|date_time            | rainy_day_YN  |
|---------------------| ------------- |
|2022/01/03  00:00:00 |  1            |
|2022/01/04  00:00:00 |  0            |
|2022/01/05  00:00:00 |  1            |
...

我想将 DF2 和 DF1 结合起来,这样我就可以看到哪个 6 小时的时间块同时满足这两个条件,我需要的最终 DF 应该是这样的

|date_time            | congestion_YN | rainy_day_YN |
|---------------------| ------------- | ------------ |
|2022/01/03  00:00:00 |  1            | 1            |
|2022/01/03  06:00:00 |  1            | 1            |
|2022/01/03  12:00:00 |  0            | 1            |
|2022/01/03  18:00:00 |  1            | 1            |
|2022/01/04  00:00:00 |  0            | 0            |
|2022/01/04  06:00:00 |  0            | 0            |
...

几个月前我才开始学习 python,这是我的第一个项目。我不知道从哪里开始或寻找什么。任何帮助将不胜感激。

【问题讨论】:

    标签: python-3.x pandas dataframe datetime


    【解决方案1】:

    首先您需要确保date_time 列确实是日期时间类型,如果不是,则 (reference)

    df1['date_time'] = pd.to_datetime(df1['date_time'])
    df2['date_time'] = pd.to_datetime(df2['date_time'])
    

    然后您可以添加所需的列

    df1['rainy_day_YN'] = df1['date_time'].dt.date.map(df2.set_index('date_time')['rainy_day_YN'])
    

    df1['date_time'].dt.date 取出日期组件

    map(mapping) 函数尝试将每个日期映射到由映射决定的另一个值

    df2.set_index('date_time')['rainy_day_YN'] 是我们的映射。它是一个Series,它的索引(date_time)作为映射的键,使用Series的值(rainy_day_YN)作为映射的值。

    您也可以使用pd.merge 来执行最后一行代码的操作,这需要您在 df1 中添加一个虚拟的 date 列。

    【讨论】:

      猜你喜欢
      • 2022-11-22
      • 2020-04-30
      • 2018-07-16
      • 1970-01-01
      • 2016-07-23
      • 2021-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多