如何在Python Pandas中按统计值分组统计SerialNr数量
解决方法
先构造你的原始DataFrame:
import pandas as pd df = pd.DataFrame({ 'SerialNr': [1, 2, 3, 4], 'Amount': [2, 4, 3, 2] })
直接用groupby会漏掉无对应记录的Amount(比如示例里的1),得按以下步骤处理:
- 统计已有Amount对应的SerialNr数量
count_result = df.groupby('Amount')['SerialNr'].count().reset_index(name='Quantity of SerialNr')
- 补全所有目标Amount值并填充0
因为你需要包含1到4的所有Amount,先生成完整的Amount序列,再和统计结果做左连接,缺失的数量用0填充:
# 生成1到4的完整Amount列表 full_amounts = pd.DataFrame({'Amount': range(1, 5)}) # 左连接合并,保留所有Amount值 final_result = full_amounts.merge(count_result, on='Amount', how='left').fillna(0) # 将数量转为整数类型 final_result['Quantity of SerialNr'] = final_result['Quantity of SerialNr'].astype(int)
最终final_result的结果如下:
| Amount | Quantity of SerialNr |
|---|---|
| 1 | 0 |
| 2 | 2 |
| 3 | 1 |
| 4 | 1 |
为什么直接groupby没成功?
groupby只会对数据中实际存在的Amount值分组统计,不会自动补全缺失的类别。要得到包含所有目标Amount的结果,必须手动生成完整的类别序列再合并填充。
内容的提问来源于stack exchange,提问作者lis
相关产品推荐
相关产品推荐

