重复Custid记录的均值计算与Python代码实现咨询
问题背景
输入数据表(Custid存在重复记录)
| Custid | transactions | price | revenue |
|---|---|---|---|
| 12456 | 2300 | 21 | 48300 |
| 12456 | 5200 | 29 | 150800 |
| 78901 | 3000 | 30 | 90000 |
| 676512 | 5200 | 24 | 124800 |
| 676512 | 7400 | 18 | 133200 |
需求说明
- 去除Custid的重复记录
- 对拥有多条记录的Custid,计算
transactions和price字段的平均值 - 重新计算
revenue,公式为:transactions平均值 × price平均值
预期输出表
| Custid | transactions | price | revenue |
|---|---|---|---|
| 12456 | 3750 | 25 | 93750 |
| 78901 | 3000 | 30 | 90000 |
| 676512 | 6300 | 21 | 132300 |
原代码问题分析
原代码存在多处语法与逻辑错误:
- 读取CSV时语法错误:
df1 .pd.read_csv多了空格,且变量名、字符串未加引号 - 列名引用错误:
df1[custid]未给列名加引号,应为df1['Custid'] - 逻辑偏差:用
value_counts()仅能得到计数,未按Custid分组计算均值,反而误用全局均值 np.where参数不完整,无法实现按分组处理的逻辑
正确解决方案
使用Pandas的groupby按Custid分组,计算指定字段均值后重新生成revenue列:
import pandas as pd # 读取数据(确保文件路径正确) df1 = pd.read_csv("file1.csv") # 按Custid分组,计算transactions和price的平均值 grouped_df = df1.groupby('Custid')[['transactions', 'price']].mean().reset_index() # 重新计算revenue grouped_df['revenue'] = grouped_df['transactions'] * grouped_df['price'] # 查看结果 print(grouped_df)
代码说明
groupby('Custid'):按客户ID对数据分组[['transactions', 'price']].mean():对分组后的交易数、价格字段分别计算平均值reset_index():将分组后的索引转换为普通列,恢复Custid为数据列- 最后通过两列相乘得到新的revenue值,完全匹配需求
内容的提问来源于stack exchange,提问作者user3369545
相关产品推荐
相关产品推荐

