微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用Python的每小时频率计数

我将这个每小时的csv数据按日排序数百天:

2011.05.16,00:00,1.40893
2011.05.16,01:00,1.40760
2011.05.16,02:00,1.40750
2011.05.16,03:00,1.40649

我想计算每小时设置每日最大值的次数,所以如果在00:00我的最大值是2011.05.16天,我加1到00:00,依此类推.为此,我使用循环以这种方式计算索引的小时数:

def graph():    
Date, Time,  High = np.genfromtxt(myPath, delimiter=",",
                                  unpack = True,  converters={0:date_converter})                                                                           
numList = [""] * 24
index=0
hour=0    
count = [0] * 24

for eachHour in Time:        
    numList[hour] += str(High[index])        
    index += 1
    hour +=1        

    if hour == 24:           
        higher = (numList.index(max(numList)))
        count[higher] += 1            
        hour = 0            
        numList = [""] * 24

问题是在我的数据中经常会有一些缺失,但是循环无法识别它并继续将值放在下一小时的索引中.我到处搜索,但我是编程的新手,这是我的第一个“复杂”工作,所以我需要更具体的答案,以了解它是如何工作的.那你怎么做一个像解释的每小时频率计数?
最终结果应该是:

00:00 n time max of the day   
01:00 n time max of the day   
02:00 n time max of the day  
etc

解决方法:

首先阅读csv:

In [11]: df = pd.read_csv('foo.csv', sep=',', header=None, parse_dates=[[0, 1]])

In [12]: df.columns = ['date', 'val']

In [13]: df.set_index('date', inplace=True)

In [14]: df
Out[14]: 
                         val
date                        
2011-05-16 00:00:00  1.40893
2011-05-16 01:00:00  1.40760
2011-05-16 02:00:00  1.40750
2011-05-16 03:00:00  1.40649

使用resample来获取每天的最大值:

In [15]: day_max = df.resample('D', how='max')

检查每个值是否为最大日期:

In [16]: df['is_day_max'] = day_max.lookup(df.index.normalize(), len(df) * ['val']) == df.val

In [17]: df
Out[17]: 
                         val is_day_max
date                                   
2011-05-16 00:00:00  1.40893       True
2011-05-16 01:00:00  1.40760      False
2011-05-16 02:00:00  1.40750      False
2011-05-16 03:00:00  1.40649      False

然后在每小时总结这些:

In [18]: df.groupby(df.index.time)['is_day_max'].sum()
Out[18]: 
00:00:00    1
01:00:00    0
02:00:00    0
03:00:00    0
Name: is_day_max, dtype: float64

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐