根据python中的条件创建索引

时间:2016-08-04 05:49:51

标签: python loops python-3.x pandas

我有 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中执行此操作。我们可能需要按天,日期和小时对数据进行排序。我知道这很简单,但我被卡住了。我们还可以创建日期序列的查找吗?

2 个答案:

答案 0 :(得分:1)

您可以使用的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]

isin然后cumsum检查值:

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

答案 1 :(得分:0)

根据数据的结构,你可以做一个看起来像这样的计数器。我会假设你列出了一个小时的清单?

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

您可以列出您想要查找的内容

 select = [3,4,5] //This is your  selection list.

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

count = 0
for i in select:
    if i in hours:
        count+=1

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


    count = count*7*5

对不起,如果这个答案不符合你的要求,我还不能添加评论!但这是我能给予的最好的