我有一个数据框,其中包含大量犯罪统计数据,包括犯罪日期和时间以及犯罪类别。
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
---
因此对于上面的示例,它会简单地打印:“Other Offences”。
这是一个庞大的数据库,超过 400,000 行。
我需要编写一个函数,允许我输入任何给定的时间范围(使用从和到),然后确定哪个犯罪类别发生的频率最高。这就是我所拥有的,但它不起作用:
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 列)。完成此操作后,我想打印最常发生的犯罪。
建议?
最佳答案
首先,为了提高效率,请将索引设置为日期。假设您的日期列是 Date
并且犯罪类别是 Crime
# 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'
关于python - 使用日期时间确定时间间隔内的最高频率事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41786241/