基于Price列指定区间对Revenue列聚合及交易数统计
实现方法
这其实是Pandas分组聚合的典型场景,用pd.cut()配合groupby().agg()就能轻松同时获取你要的交易数和Revenue总和,直接给你完整的代码方案:
import pandas as pd # 假设你的DataFrame名为df,包含Price和Revenue列 # 1. 用pd.cut将Price划分到指定区间 price_groups = pd.cut(df['Price'], bins=[5, 10, 15]) # 2. 按区间分组,同时聚合交易数和Revenue总和 summary = df.groupby(price_groups).agg( 交易数=('Price', 'size'), # size统计每组的行数(即交易数量) 总营收=('Revenue', 'sum') # sum计算每组的Revenue总和 ).reset_index() # 查看结果 print(summary)
关键细节说明:
- 区间划分逻辑:
pd.cut()默认是左闭右开的区间,也就是[5,10)、[10,15),如果你的数据里有等于15的Price值,会被分到NaN组里。如果要包含15或者更大的值,可以把bins改成[5,10,15, float('inf')],这样最后一个区间就是[15, ∞)。 - 交易数统计:用
size而不是count是因为size会统计每组的所有行数,哪怕Price有缺失值也会算进去;如果你的Price列没有缺失值,count结果也一样。 - 自定义区间标签:如果觉得默认的区间格式不够直观,可以给
pd.cut()加labels参数自定义名称:price_groups = pd.cut(df['Price'], bins=[5, 10, 15], labels=['5-10元', '10-15元']) - 重置索引:
reset_index()是把分组用的区间从索引转为普通列,这样结果的结构更规整,方便后续分析或导出。
举个例子,假设你的df数据是:
| Price | Revenue |
|---|---|
| 6 | 100 |
| 9 | 200 |
| 12 | 150 |
| 14 | 300 |
运行代码后得到的summary会是:
| Price | 交易数 | 总营收 |
|---|---|---|
| (5, 10] | 2 | 300 |
| (10, 15] | 2 | 450 |
(注:这里显示的是左开右闭,因为Pandas默认的区间表示方式,实际划分逻辑是左闭右开,你可以通过include_lowest=True参数调整为左闭右闭,比如pd.cut(df['Price'], bins=[5,10,15], include_lowest=True),这时第一个区间会是[5,10])
内容的提问来源于stack exchange,提问作者bluetooth
相关产品推荐
相关产品推荐

