Pandas groupby agg统计EC2实例数返回ID列表而非计数问题求助
问题原因
你的输出为实例ID拼接字符串,大概率是实际执行时对InstanceId字符串列误用了sum聚合而非count;同时你原代码仅按State单维度分组,不符合按实例类型、可用区、运行状态统计的需求。
解决方案
第一步:确认原始数据格式
先执行以下代码确认基础数据结构正常,每行对应单个EC2实例:
print(ec2_list[['InstanceId', 'State', 'InstanceType', 'AvailabilityZone']].head(5)) print(ec2_list.dtypes)
确认InstanceId列为单个字符串格式,不是列表或预拼接的字符串。
第二步:正确分组统计
使用多维度分组+计数聚合,推荐用size()直接统计分组内行数,规避列数据类型问题:
# 按可用区、实例类型、实例状态三个维度分组统计数量 summary = ec2_list.groupby( ['AvailabilityZone', 'InstanceType', 'State'], as_index=False ).size() # 重命名计数列方便识别 summary.rename(columns={'size': 'InstanceCount'}, inplace=True)
如果你坚持用count实现,代码如下:
summary = ec2_list.groupby( ['AvailabilityZone', 'InstanceType', 'State'], as_index=False )['InstanceId'].count() summary.rename(columns={'InstanceId': 'InstanceCount'}, inplace=True)
第三步:导出Excel
分组时已经指定as_index=False,分组字段会变成普通列,导出时不需要保留索引:
summary.to_excel( writer, sheet_name='ec2summary', startrow=0, startcol=0, index=False )
导出后的表格会包含可用区、实例类型、实例状态、实例数量四列,完全符合你的统计需求。
内容的提问来源于stack exchange,提问作者Nidorino94
相关产品推荐
相关产品推荐

