通过PowerShell处理CSV文件:按用户ID统计位置出现次数
按ID分组统计不同地点的出现次数并格式化输出
需求说明
现有包含Timestamp、Location、ID、Name四列的CSV文件,需按用户ID分组,统计每个ID在不同Location的出现次数,并输出指定格式的结果(同一ID的多行记录中,仅第一行显示ID,后续行ID列留空)。
示例CSV数据
Timestamp Location ID Name 01/01/2024 00:02 London 171320 Derek Peters 01/02/2024 00:02 London 114554 Jon Adams 01/02/2024 01:02 Manchester 680283 Nigel Terry 02/02/2024 00:02 London 210144 Jenny Smith 03/02/2024 00:02 London 171320 Derek Peters 03/02/2024 00:02 Manchester 265712 Amanda Lort 04/02/2024 00:02 Manchester 114554 Jon Adams 05/02/2024 00:02 Manchester 680283 Nigel Terry 06/02/2024 00:02 Coventry 171320 Derek Peters 06/02/2024 00:02 Coventry 206665 Stevie Eddies 07/02/2024 00:02 Coventry 171320 Derek Peters
期望输出格式
ID Location Count 171320 London 2 Coventry 2 114554 London 1 Manchester 1 680283 Manchester 2 210144 London 1 265712 Manchester 1 206665 Coventry 1
解决方案(Python + Pandas)
使用Pandas库可高效完成分组统计和格式调整,以下是完整实现代码:
import pandas as pd # 读取CSV文件,若为逗号分隔可去掉delim_whitespace参数 df = pd.read_csv('your_file.csv', delim_whitespace=False) # 按ID和Location分组,统计出现次数 count_df = df.groupby(['ID', 'Location']).size().reset_index(name='Count') # 处理ID列格式:同一ID的后续行设为空字符串 count_df['ID'] = count_df['ID'].where(count_df['ID'] != count_df['ID'].shift(), '') # 格式化输出,设置列宽保证对齐 print(count_df.to_string(index=False, col_space=[8, 12, 6], justify='left'))
代码说明
- 读取CSV:根据文件实际分隔符调整参数,逗号分隔直接用
pd.read_csv('your_file.csv')即可。 - 分组统计:通过
groupby按ID和地点组合分组,size()统计次数,reset_index将结果转为标准DataFrame格式。 - 格式调整:用
shift()对比当前行与上一行的ID值,相同则清空当前行ID,实现同一ID仅首行显示的效果。 - 对齐输出:通过
to_string关闭索引显示,设置列宽确保输出与期望格式对齐。
内容的提问来源于stack exchange,提问作者user3601472
相关产品推荐
相关产品推荐

