熊猫每行平均两列

时间:2020-07-08 13:53:36

标签: pandas

我对熊猫有点陌生,我有一个问题 我想按行划分两列。

有关数据的更多信息:我有几家公司,以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() 

但是它不起作用... 有任何想法吗? 谢谢!

1 个答案:

答案 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())