python - 按日期过滤 pandas 数据帧以计算节目时间线的观看次数
问题描述
我需要按程序计算来自 json 日志文件的流媒体频道的观众人数。我通过它们的开始时间来识别程序,例如:
到目前为止,我有两个这样的数据框:
第一个包含日志文件中的所有时间戳
viewers_from_log = pd.read_json('sqllog.json', encoding='UTF-8')
# Convert date string to pandas datetime object:
viewers_from_log['time'] = pd.to_datetime(viewers_from_log['time'])
源 JSON 文件:
[
{
"logid": 191605,
"time": "0:00:17"
},
{
"logid": 191607,
"time": "0:00:26"
},
{
"logid": 191611,
"time": "0:01:20"
}
]
第二个包含节目的开始时间和标题
programs_start_time = pd.DataFrame.from_dict('programs.json', orient='index')
{
"2019-05-29": [
{
"title": "\"Amiről a kövek mesélnek\"",
"startTime_dt": "2019-05-29T00:00:40Z"
},
{
"title": "Koffer - Kedvcsináló Kul(t)túrák Külföldön",
"startTime_dt": "2019-05-29T00:22:44Z"
},
{
"title": "Gubancok",
"startTime_dt": "2019-05-29T00:48:08Z"
}
]
}
所以我需要做的是统计日志文件中的条目/程序并将它们链接到程序标题。
解决方案
我的方法是从程序数据中分割每个日期范围的日志数据并获取形状。接下来为程序数据添加列和结果:
import pandas as pd
# setup test data
log_data = {'Time': ['2019-05-30 00:00:26', '2019-05-30 00:00:50', '2019-05-30 00:05:50','2019-05-30 00:23:26']}
log_data = pd.DataFrame(data=log_data)
program_data = {'Time': ['2019-05-30 00:00:00', '2019-05-30 00:22:44'],
'Program': ['Program 1', 'Program 2']}
program_data = pd.DataFrame(data=program_data)
counts = []
for index, row in program_data.iterrows():
# get counts on selected range
try:
log_range = log_data[(log_data['Time'] > program_data.loc[index].values[0]) & (log_data['Time'] < program_data.loc[index+1].values[0])]
counts.append(log_range.shape[0])
except:
log_range = log_data[log_data['Time'] > program_data.loc[index].values[0]]
counts.append(log_range.shape[0])
# add aditional column with collected counts
program_data['Counts'] = counts
输出:
Time Program Counts
0 2019-05-30 00:00:00 Program 1 3
1 2019-05-30 00:22:44 Program 2 1
推荐阅读
- c++ - 模板化函数语法错误中使用的模板化类中的嵌套类
- python-3.x - 如何不将命令行参数发送到导入的文件
- xslt - 我无法在 XMLSpy 中使用 Saxon 向元素添加特定属性
- python - 在Python中的标点符号或数字上拆分字符串
- python - 哪种方法最适合在 discord.py 中启动机器人?login() 和 connect() vs start() vs run()
- vue.js - Vue-apollo 查询不呈现变量
- java - java.lang.NoClassDefFoundError: Lorg/springframework/beans/factory/access/BeanFactoryReference;
- selenium - 如何从 Selenium::Remote::Driver 访问控制台(浏览器)日志
- ios - Swift 泛型函数问题。减少重复代码
- codemirror - 未选择编辑器时如何禁用代码镜像中的突出显示活动行?