如何使用pandas统计Device No频次时加入Full name of organization列?
解决方案
要实现统计设备编号数量并关联对应组织全称的需求,可通过pandas的分组聚合功能完成,以下是针对不同数据场景的实现代码:
场景1:每个设备编号对应唯一组织
如果数据中每个Device No仅关联一个Full name of organization,使用以下代码:
import pandas as pd df = pd.read_excel("E:\\input.xlsx") # 按设备编号分组,提取组织全称并统计数量 result_df = df.groupby(['Device No'])['Full name of organization'].agg(['first', 'size']).reset_index() # 重命名列名匹配输出需求 result_df.columns = ['Device No', 'Full name of organization', 'Count'] # 导出结果到Excel,不包含默认索引 result_df.to_excel("E:\\output.xlsx", index=False)
场景2:同一设备编号对应多个组织
如果存在一个设备编号关联多个不同组织的情况,可合并该编号下的所有唯一组织名称:
import pandas as pd df = pd.read_excel("E:\\input.xlsx") # 分组后合并唯一组织名称,并统计数量 result_df = df.groupby(['Device No'])['Full name of organization'].agg( org_names=lambda x: ', '.join(x.unique()), count='size' ).reset_index() # 重命名列名 result_df.columns = ['Device No', 'Full name of organization', 'Count'] result_df.to_excel("E:\\output.xlsx", index=False)
代码说明
groupby(['Device No']):按设备编号对数据分组,确保同一编号的记录归为一组。agg():对分组后的组织列执行聚合操作:- 唯一组织场景用
first()取分组内第一个组织名称; - 多组织场景用
lambda x: ', '.join(x.unique())合并分组内所有不重复的组织名称; size统计分组内的记录数,即设备编号出现的次数。
- 唯一组织场景用
reset_index():将分组索引转为普通列,方便后续导出。to_excel(index=False):导出时不包含pandas默认的索引列,让输出表格更整洁。
内容的提问来源于stack exchange,提问作者Andrew
相关产品推荐
相关产品推荐

