我对熊猫有点陌生,我有一个问题 我想按行划分两列。
有关数据的更多信息:我有几家公司,以m的收入出售了n项商品
company # nr of items revenue
1 30 32.0
2 40 59.3
3 22.0 64
我想计算
company # nr of items revenue average price per item
1 30 32.0
2 40 59.3
3 22.0 64
每件商品的平均价格=收入/每件商品的价格
我尝试过
df[['company','revenue','nr of items']].groupby('company')['revenue'].sum()/['nr of items'].sum()
但是它不起作用... 有任何想法吗? 谢谢!
答案 0 :(得分:0)
您的代码中的缺陷是:
df[['company','revenue','nr of items']].groupby('company')['revenue'].sum()
是一个正确的表达式(单独运行),用于计算公司的总收入 (系列)。
然后您尝试将其除以['nr of items'].sum()
。
在这里引发了异常,因为['nr of items']
是普通的,
pythonic 字符串列表,其中没有名为 sum 的属性
(如错误消息中所述)。
假设 df 包含:
company nr of items revenue
0 1 30.0 32.0
1 1 20.0 41.0
2 2 40.0 59.3
3 2 12.0 82.1
4 3 22.0 64.0
5 3 22.5 18.0
(每个公司几行)。
第一个变体-逐步
第一步是按公司计算总计:
totalByComp = df.groupby('company').sum()
结果是:
nr of items revenue
company
1 50.0 73.0
2 52.0 141.4
3 44.5 82.0
然后计算预期结果(按项目划分的平均收入),除以 nr个项目的收入 :
result = totalByComp.revenue / totalByComp['nr of items']
获取:
company
1 1.460000
2 2.719231
3 1.842697
dtype: float64
或更短(全部合一)-将lambda函数应用于每个组:
df.groupby('company').apply(lambda grp: grp.revenue.sum() / grp['nr of items'].sum())