DataFrame添加自动索引报错,事件统计次数始终为1的求助
问题修复:DC服务器事件日志统计脚本优化
输入数据
action_list = ['logged-out', 'logged-out', 'logged-out', 'Directory Service Access', 'Directory Service Access', 'Directory Service Access', 'logged-out', 'logged-out', 'Directory Service Access', 'created-process', 'created-process'] code_list = ['4634', '4634', '4634', '4662', '4662', '4662', '4634', '4634', '4662','4688'] event_code_list = ['4662', '4688']
原脚本核心问题
- 字典去重丢失数据:
dict(zip(action_list, code_list))会自动去重相同的action键,原列表中多次出现的事件被合并成单个键值对,导致后续统计次数始终为1。 - 索引处理冗余且错误:手动创建
RangeIndex完全多余,还会在melt操作后引发索引不匹配的ValueError。 - 次数统计逻辑错误:
Counter(df)统计的是DataFrame列名的出现次数,而非原事件列表中事件的真实发生次数。
修复后的完整脚本
import pandas as pd from collections import Counter # 输入数据 action_list = ['logged-out', 'logged-out', 'logged-out', 'Directory Service Access', 'Directory Service Access', 'Directory Service Access', 'logged-out', 'logged-out', 'Directory Service Access', 'created-process', 'created-process'] code_list = ['4634', '4634', '4634', '4662', '4662', '4662', '4634', '4634', '4662','4688'] event_code_list = ['4662', '4688'] # 1. 用元组列表保存所有事件对,避免字典自动去重 event_pairs = list(zip(action_list, code_list)) # 2. 过滤出符合目标代码的事件 filtered_pairs = [pair for pair in event_pairs if pair[1] in event_code_list] # 3. 统计每个(事件名称,事件代码)组合的发生次数 event_counts = Counter(filtered_pairs) # 4. 转换为DataFrame并调整结构 new_df = pd.DataFrame(event_counts.items(), columns=['Event_Code', 'Count']) # 拆分事件名称和代码列 new_df[['Event', 'Code']] = pd.DataFrame(new_df['Event_Code'].tolist(), index=new_df.index) # 调整列顺序并删除临时列 new_df = new_df[['Event', 'Code', 'Count']] # 5. HTML输出逻辑优化 if new_df.empty: # 无事件时生成占位DataFrame empty_df = pd.DataFrame({ 'Event': ['-'], 'Code': ['-'], 'Count': ['-'] }) html = empty_df.to_html(index=False) else: # 输出时隐藏默认索引,让HTML更整洁 html = new_df.to_html(index=False) # 写入HTML文件 with open('alerts.html', 'w') as f: f.write(html) # 打印结果验证 print(new_df)
修复效果说明
运行后将输出正确统计次数的DataFrame:
Event Code Count 0 Directory Service Access 4662 4 1 created-process 4688 2
- 保留了所有重复事件的统计次数
- 避免了索引相关的错误
- HTML输出自动隐藏冗余索引,格式更美观
内容的提问来源于stack exchange,提问作者Robin Sage
相关产品推荐
相关产品推荐

