【问题标题】:create index based on condition in python在python中根据条件创建索引
【发布时间】:2016-12-10 02:32:09
【问题描述】:

我有 5 周(35 天) 的数据,其中 start_date (1-AUG-2016) 是第一周的第一个日期和 end_date( )是第 5 周的最后一天。我也有每小时的数据(比如 0 - 23)。

day date(dd-mm-yyyy)  hour
1    01-01-2016       0
1    01-01-2016       1
1    01-01-2016       2
1    01-01-2016       3
1    01-01-2016       4
1    01-01-2016       5
1    01-01-2016       6
.
.
1    01-01-2016       23
.
.
35   04-02-2016       0
35   04-02-2016       1
.
.

我想创建并索引它直到我选择的小时数(比如 3 - 5)并将 1 添加到下一个索引。但是,当它达到非选定时间时,它应该保留其最后一个值。像这样的东西。

day date(dd-mm-yyyy)  hour  Index 
1    01-01-2016       0     1
1    01-01-2016       1     1
1    01-01-2016       2     1
1    01-01-2016       3     2
1    01-01-2016       4     3
1    01-01-2016       5     4
1    01-01-2016       6     5
1    01-01-2016       7     5
1    01-01-2016       8     5
.
.
1    01-01-2016       23    5
2    02-01-2016       0     5
2    02-01-2016       1     5
2    02-01-2016       2     5
2    02-01-2016       3     6
.
35   04-02-2016       0
35   04-02-2016       1
.
.

我们可以在 python 中使用循环来做到这一点吗?我们可能需要按天、日期和小时对数据进行排序。我知道这很简单,但我被困住了。我们还可以创建日期序列查找吗?

【问题讨论】:

    标签: python loops python-3.x pandas


    【解决方案1】:

    根据数据的结构,您可以创建如下所示的计数器。我会假设您已经列出了时间?

     小时 = [0,1,2,3,4,5...,23] 

    你可以这样列出你想找到的东西

     select = [3,4,5] //这是你的选择列表。

    然后在选择列表中运行一个 for 循环。

    计数 = 0 为我选择: 如果我在几个小时内: 计数+=1

    所以如果你想计算剩下的几周,你可以乘以总天数,我假设这是一周中的天数乘以周数。

    计数=计数*7*5

    对不起,如果这个答案不符合您的要求,我还不能添加 cmets!但这是我能给的最好的了

    【讨论】:

      【解决方案2】:

      你可以使用的IIUC:

      print (df)
          day date(dd-mm-yyyy)  hour
      0     1       01-01-2016     0
      1     1       01-01-2016     1
      2     1       01-01-2016     2
      3     1       01-01-2016     3
      4     1       01-01-2016     4
      5     1       01-01-2016     5
      6     1       01-01-2016     6
      7     1       01-01-2016    23
      8    35       04-02-2016     0
      9    35       04-02-2016     1
      10   35       04-02-2016     2
      11   35       04-02-2016     3
      12   35       04-02-2016     4
      13   35       04-02-2016     5
      14   35       04-02-2016     6
      15   35       04-02-2016     7
      
      #create list for lookup
      hours = [3,4,5]
      hours = hours + [hours[-1] + 1]
      print (hours)
      [3, 4, 5, 6]
      

      通过isincumsum 检查值:

      print (df.hour.isin(hours))
      0     False
      1     False
      2     False
      3      True
      4      True
      5      True
      6      True
      7     False
      8     False
      9     False
      10    False
      11     True
      12     True
      13     True
      14     True
      15    False
      Name: hour, dtype: bool
      
      df['Index'] = df.hour.isin(hours).cumsum() + 1
      print (df)
          day date(dd-mm-yyyy)  hour  Index
      0     1       01-01-2016     0      1
      1     1       01-01-2016     1      1
      2     1       01-01-2016     2      1
      3     1       01-01-2016     3      2
      4     1       01-01-2016     4      3
      5     1       01-01-2016     5      4
      6     1       01-01-2016     6      5
      7     1       01-01-2016    23      5
      8    35       04-02-2016     0      5
      9    35       04-02-2016     1      5
      10   35       04-02-2016     2      5
      11   35       04-02-2016     3      6
      12   35       04-02-2016     4      7
      13   35       04-02-2016     5      8
      14   35       04-02-2016     6      9
      15   35       04-02-2016     7      9
      

      【讨论】:

      • 您能否将我的示例中所需的输出添加到问题中?
      • done ,请检查一天从 2 开始的行,理想情况下应该是 5 ,但是在您的代码中,当它达到 0 时,它会加一。
      • 超级棒又简单。再次感谢:)
      猜你喜欢
      • 2021-05-21
      • 2022-12-06
      • 2021-07-18
      • 2023-02-23
      • 2018-04-20
      • 2021-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多