【问题标题】:How to add a new categorical column with numbering as per time Interval in Pandas如何在 Pandas 中添加一个按时间间隔编号的新分类列
【发布时间】:2021-10-28 00:17:52
【问题描述】:
                                      Value

2021-07-15 00:00:00 10

2021-07-15 06:00:00 10

2021-07-15 12:00:00 10

2021-07-15 18:00:00 10

2021-07-16 00:00:00 20

2021-07-16 06:00:00 10

2021-07-16 12:00:00 10

2021-07-16 18:00:00 20

我想添加一列这样当它出现时

00:00:00 1

06:00:00 2

12:00:00 3

18:00:00 4

最终,我想要这样的东西

                Value  Number

2021-07-15 00:00:00 10 1

2021-07-15 06:00:00 10 2

2021-07-15 12:00:00 10 3

2021-07-15 18:00:00 10 4

2021-07-16 00:00:00 20 1

2021-07-16 06:00:00 10 2

2021-07-16 12:00:00 10 3

2021-07-16 18:00:00 20 4

等等

我希望 Numbering 列在 00:00:00 时始终显示 1,在 06:00:00 时始终显示 2,在 12:00:00 时始终显示 3,无论何时现在是 18:00:00 时间,它总是说 4。这样,我将有一个只有 1,2,3,4 值的分类列

【问题讨论】:

    标签: python python-3.x pandas datetime time-series


    【解决方案1】:

    抱歉,这里是新人,所以我没有足够的代表发表评论。但是@Keiku 的解决方案比你想象的更接近。如果您将 .time 替换为 .hour,您将获得一天中的小时。除以 6 得到 0:00 到 18:00 的 0-3 个类别。如果您必须将它们具体放在 1-4 范围内,只需添加 1。

    借用@Keiku的示例代码:

    import pandas as pd
    
    df = pd.DataFrame({
        '2021-07-15 00:00:00 0.48',
        '2021-07-15 06:00:00 80.00',
        '2021-07-15 12:00:00 6.10',
        '2021-07-15 18:00:00 1400.00',
        '2021-07-16 00:00:00 1400.00'
        }, columns=['value'])
    
    df['date'] = pd.to_datetime(df['value'].str[:19])
    df.sort_values(['date'], ascending=[True], inplace=True)
    df['category'] = df['date'].dt.hour / 6  # + 1 if you want this to be 1-4
    

    【讨论】:

      【解决方案2】:

      您可以使用pd.to_datetime 转换为日期时间,使用.dt.time 提取时间。您可以将pd.factorize 用于 1、2、3、4 个类别。

      import pandas as pd
      
      df = pd.DataFrame({
          '2021-07-15 00:00:00 0.48',
          '2021-07-15 06:00:00 80.00',
          '2021-07-15 12:00:00 6.10',
          '2021-07-15 18:00:00 1400.00',
          '2021-07-16 00:00:00 1400.00'
      }, columns=['value'])
      df
      #                          value
      # 0     2021-07-15 00:00:00 0.48
      # 1    2021-07-15 06:00:00 80.00
      # 2     2021-07-15 12:00:00 6.10
      # 3  2021-07-16 00:00:00 1400.00
      # 4  2021-07-15 18:00:00 1400.00
      
      df['date'] = pd.to_datetime(df['value'].str[:19])
      df.sort_values(['date'], ascending=[True], inplace=True)
      df['time'] = df['date'].dt.time
      df['index'], _ = pd.factorize(df['time'])
      df['index'] += 1
      df
      #                          value                date      time  index
      # 0     2021-07-15 00:00:00 0.48 2021-07-15 00:00:00  00:00:00      1
      # 1    2021-07-15 06:00:00 80.00 2021-07-15 06:00:00  06:00:00      2
      # 2     2021-07-15 12:00:00 6.10 2021-07-15 12:00:00  12:00:00      3
      # 4  2021-07-15 18:00:00 1400.00 2021-07-15 18:00:00  18:00:00      4
      # 3  2021-07-16 00:00:00 1400.00 2021-07-16 00:00:00  00:00:00      1
      

      【讨论】:

      • 您好,感谢您的回答。但是我想要那个编号列,只要它是 00:00:00 时间它总是说 1,每当它是 06:00:00 时间它总是说 2,每当它是 12:00:00 时间它总是说 3,只要它是 18 :00:00 时间总是说 4。这样,我将有一个只有 1,2,3,4 值的分类列
      • @RavikantPandey 我更新了。请确认。
      猜你喜欢
      • 2021-03-06
      • 2018-02-12
      • 1970-01-01
      • 2019-05-31
      • 2022-01-20
      • 2022-01-20
      • 2020-08-22
      • 2019-07-01
      • 2019-06-10
      相关资源
      最近更新 更多