python – 使用datetime确定时间间隔内的最高频率事件

我有一个数据框,其中包括一些关于犯罪的统计数据,包括犯罪的日期和时间以及类别.

0       5/13/2015 8:55           VEHICLE THEFT   
1       5/13/2015 8:41          OTHER OFFENSES   
2       5/13/2015 8:36          OTHER OFFENSES   
3       5/13/2015 8:30            NON-CRIMINAL   
4       5/13/2015 8:17          OTHER OFFENSES   
5       5/13/2015 8:16          OTHER OFFENSES   
6       5/13/2015 8:10           LARCENY/THEFT   
7       5/13/2015 8:00                BURGLARY   
8       5/13/2015 8:00          MISSING PERSON   
9       5/13/2015 8:00          OTHER OFFENSES   
10      5/13/2015 8:00                 ASSAULT 
---

因此,对于上面的示例,它只会打印:“其他违规行为”.

它是一个庞大的数据库,超过400,000行.

我需要编写一个函数,允许我输入任何给定的时间范围(使用from和to),然后确定哪个犯罪类别的频率最高.这就是我所拥有的,它不起作用:

import pandas as pd
import csv
import datetime
timeData = open("timeData.csv")
df = pd.read_csv('timeData.csv')

from datetime import timedelta, date
df['Dates'] = pd.to_datetime(df['Dates']) #this converts the values in the Dates column to datetime format

def daterange(start_date, end_date):
    for n in range(int ((end_date - start_date).days)):
        yield start_date + timedelta(n)

start_date = date(2015, 5, 1)
end_date = date(2015, 6, 2)
for daterange(start_date, end_date):
    df['Category'].value_counts() 

我想遍历日期列(列A)并仅选择适合我的日期范围的日期.对于我的日期范围内的日期,我想计算每个犯罪的实例数(B列).完成此操作后,我想打印最频繁发生的犯罪.

建议?

解决方法:

首先,为了使这个效率更高,将索引设置为日期.假设您的日期列是日期,犯罪类别是犯罪

# make pd.Series with date as the index and crimes as the values
d1 = df.set_index('Date').Crime.sort_index()

# function that uses date slicing and uses values counts
def most_freq(start, end):
    return d1[start:end].value_counts().index[0]

# demo
most_freq('2015-05', '2015-05')

'OTHER_OFFENSES'

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

相关推荐