我有 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中执行此操作。我们可能需要按天,日期和小时对数据进行排序。我知道这很简单,但我被卡住了。我们还可以创建日期序列的查找吗?
答案 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]
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
对不起,如果这个答案不符合你的要求,我还不能添加评论!但这是我能给予的最好的