如何让Pandas DataFrame显示数组未匹配项的0计数?
解决方法
你可以通过两种方式实现需求,确保输出包含数组中所有元素,不存在的项显示0:
方法一:提前将location2转为分类类型
在统计前把location2列设置为包含你数组所有元素的分类,这样分组统计时会自动包含所有分类项,不存在的计数直接为0:
import pandas as pd # 定义数组元素 array = ['RegCreateKeyA', 'RegCreateKeyExA', 'RegCreateKeyExW', 'RegCreateKeyTransactedA', ...] # 将location2转为分类类型,指定所有可能的类别 df['location2'] = pd.Categorical(df['location2'], categories=array, ordered=False) # 统计每个进程调用各API的次数,自动包含所有类别 count = df.groupby(['Process_Name', 'location2']).size() # 转换为宽格式,不存在的项自动填充0 temp = count.unstack(fill_value=0) print(temp)
方法二:unstack后重新索引补0
如果不想修改原DataFrame的列类型,可以在转换为宽格式后,用reindex指定所有目标列并填充0:
import pandas as pd # 定义数组元素 array = ['RegCreateKeyA', 'RegCreateKeyExA', 'RegCreateKeyExW', 'RegCreateKeyTransactedA', ...] # 筛选包含指定API的行 rels = df.loc[df['location2'].isin(array)] # 统计每个进程调用各API的次数 count = rels.groupby(['Process_Name', 'location2']).size() # 转换为宽格式后,重新索引并填充0 temp = count.unstack().reindex(columns=array, fill_value=0) print(temp)
两种方法都能达成需求,第一种在数据量较大时更高效,因为不需要额外的索引重排操作。
内容的提问来源于stack exchange,提问作者Sinmi Akindele
相关产品推荐
相关产品推荐

