请求实现每秒统计True/False数量并生成指定HTML表格结果
按秒统计True/False数量并生成指定HTML的解决方案
嘿,我来帮你搞定这个按秒统计布尔值数量并生成目标HTML的需求!下面我分两种方案给你实现——一种是用pandas(处理时间序列统计最高效的工具),另一种是纯Python实现,你可以根据自己的环境选择。
方案一:用Pandas快速处理(推荐)
如果你的数据量比较大,或者已经在使用pandas,这个方案会非常省心:
import pandas as pd # 替换成你实际的数据源,比如读取CSV:df = pd.read_csv('your_data.csv', parse_dates=['timestamp']) data = { 'timestamp': pd.to_datetime([ '2024-05-20 12:00:00.123', '2024-05-20 12:00:00.456', '2024-05-20 12:00:00.789', '2024-05-20 12:00:01.234', '2024-05-20 12:00:01.567', '2024-05-20 12:00:02.890' ]), 'value': [True, False, True, False, False, True] } df = pd.DataFrame(data) # 将时间戳截断到秒级,作为分组依据 df['second'] = df['timestamp'].dt.floor('S') # 按秒分组统计核心指标:总样本数、True数量、False数量 stats = df.groupby('second').agg( total_samples=('value', 'count'), total_true=('value', lambda x: x.sum()), # True在Python中等价于1,sum就是数量 total_false=('value', lambda x: len(x) - x.sum()) ).reset_index() # 构建你需要的HTML结构 html_start = """<html> <head> </head> <body> <h2>audi</h2> <table> <thead> <tr> <th>Total of samples per second</th> <th>Time</th> <th>Total of TRUE</th> <th>Total of FALSE</th> </tr> </thead> <tbody> """ # 生成表格每一行的HTML table_rows = [] for _, row in stats.iterrows(): row_html = f"""<tr> <td>{row['total_samples']}</td> <td>{row['second'].strftime('%Y-%m-%d %H:%M:%S')}</td> <td>{row['total_true']}</td> <td>{row['total_false']}</td> </tr>""" table_rows.append(row_html) html_end = """</tbody> </table> </body> </html>""" # 合并所有部分得到最终HTML final_html = html_start + '\n'.join(table_rows) + html_end # 可以直接打印结果,或者保存为HTML文件 print(final_html) # 保存文件: # with open('audi_stats.html', 'w', encoding='utf-8') as f: # f.write(final_html)
方案二:纯Python实现(无需第三方库)
如果你的环境不能安装pandas,纯Python也能轻松搞定:
from datetime import datetime # 替换成你实际的数据列表,每个元素包含timestamp和value data = [ {'timestamp': '2024-05-20 12:00:00.123', 'value': True}, {'timestamp': '2024-05-20 12:00:00.456', 'value': False}, {'timestamp': '2024-05-20 12:00:00.789', 'value': True}, {'timestamp': '2024-05-20 12:00:01.234', 'value': False}, {'timestamp': '2024-05-20 12:00:01.567', 'value': False}, {'timestamp': '2024-05-20 12:00:02.890', 'value': True}, ] # 按秒分组统计 second_stats = {} for item in data: # 解析时间戳并去掉微秒,得到秒级时间键 dt = datetime.strptime(item['timestamp'], '%Y-%m-%d %H:%M:%S.%f') second_key = dt.replace(microsecond=0) # 初始化该秒的统计数据 if second_key not in second_stats: second_stats[second_key] = {'total': 0, 'true': 0, 'false': 0} # 更新统计 second_stats[second_key]['total'] += 1 second_stats[second_key]['true'] += 1 if item['value'] else 0 second_stats[second_key]['false'] += 0 if item['value'] else 1 # 构建HTML结构(和方案一完全一致) html_start = """<html> <head> </head> <body> <h2>audi</h2> <table> <thead> <tr> <th>Total of samples per second</th> <th>Time</th> <th>Total of TRUE</th> <th>Total of FALSE</th> </tr> </thead> <tbody> """ table_rows = [] # 按时间顺序排序后生成行 for time, stats in sorted(second_stats.items()): row_html = f"""<tr> <td>{stats['total']}</td> <td>{time.strftime('%Y-%m-%d %H:%M:%S')}</td> <td>{stats['true']}</td> <td>{stats['false']}</td> </tr>""" table_rows.append(row_html) html_end = """</tbody> </table> </body> </html>""" final_html = html_start + '\n'.join(table_rows) + html_end print(final_html)
关键说明
- 时间处理:核心是把时间戳截断到秒级,这样才能把同一秒内的所有数据归为一组;
- 统计逻辑:True在Python中可以被当作1计算,所以直接sum就能得到True的数量,总样本数减True数量就是False数量;
- HTML结构:完全按照你给出的模板生成,包括
<h2>audi</h2>和指定的表头,输出的HTML可以直接在浏览器打开查看。
内容的提问来源于stack exchange,提问作者Jakub Oškera
相关产品推荐
相关产品推荐

