如何用Pandas统计零件在特定循环次数区间内的更换次数
需求描述
我有一组包含零件编号(Part #)和更换时循环次数(Cycle Count)的数据集,原始数据如下:
| Part # | Cycle Count |
|---|---|
| abc | 100 |
| abc | 594 |
| abc | 1230 |
| abc | 2291 |
| def | 329 |
| def | 2001 |
| ghi | 1671 |
| jkl | 29 |
| jkl | 190 |
| mno | 700 |
| mno | 1102 |
| pqr | 2991 |
需要生成一个新表格,统计每个零件在以下循环次数区间内的更换次数:
- Cycle Count Range (1-1000)
- Cycle Count Range (1001-2000)
- Cycle Count Range (2001-3000)
目标表格示例:
| Part # | Cycle Count Range (1-1000) | Cycle Count Range (1001-2000) | Cycle Count Range (2001-3000) |
|---|---|---|---|
| abc | 2 | 1 | 1 |
| def | 1 | 0 | 1 |
| ghi | 0 | 1 | 0 |
| jkl | 2 | 0 | 0 |
| mno | 1 | 1 | 0 |
| pqr | 0 | 0 | 1 |
我不太熟练用SQL实现,想知道用Pandas怎么完成这个需求。
Pandas实现方案
通过分箱标记区间 + 透视表统计的方式即可快速实现,步骤如下:
1. 导入Pandas并创建原始数据框
先将数据转换为Pandas DataFrame:
import pandas as pd data = [ ["abc", 100], ["abc", 594], ["abc", 1230], ["abc", 2291], ["def", 329], ["def", 2001], ["ghi", 1671], ["jkl", 29], ["jkl", 190], ["mno", 700], ["mno", 1102], ["pqr", 2991] ] df = pd.DataFrame(data, columns=["Part #", "Cycle Count"])
2. 为循环次数标记所属区间
用pd.cut()函数给每条数据打上对应区间标签,注意边界设置匹配需求:
# 定义区间范围和对应标签 bins = [0, 1000, 2000, 3000] labels = [ "Cycle Count Range (1-1000)", "Cycle Count Range (1001-2000)", "Cycle Count Range (2001-3000)" ] # 添加区间列到原数据框 df["Cycle Range"] = pd.cut(df["Cycle Count"], bins=bins, labels=labels, include_lowest=True)
include_lowest=True用于确保100这类临界值能被正确归入第一个区间。
3. 透视表统计每个零件的区间更换次数
使用pivot_table()按零件分组,统计各区间的更换次数,空值自动填充为0:
result = df.pivot_table( index="Part #", columns="Cycle Range", values="Cycle Count", aggfunc="count", fill_value=0 ).reset_index() # 调整列顺序(可选,确保和目标表格完全一致) result = result[["Part #"] + labels]
4. 查看最终结果
打印result即可得到和目标表格一致的输出:
print(result)
输出内容:
Part # Cycle Count Range (1-1000) Cycle Count Range (1001-2000) Cycle Count Range (2001-3000) 0 abc 2 1 1 1 def 1 0 1 2 ghi 0 1 0 3 jkl 2 0 0 4 mno 1 1 0 5 pqr 0 0 1
内容的提问来源于stack exchange,提问作者Harrison Levesque
相关产品推荐
相关产品推荐

