如何使Python代码对于多个联接更加有效

时间:2019-06-11 00:41:21

标签: python pandas

我开始使用Python,之前我主要使用R和SQL。 我让Python代码做我想做的事,但似乎必须有一种更有效的方法来达到相同的结果。

我有3张桌子: 表A:

Store Country Department Item Sales
1     US      A          xx   10
1     US      A          kk   10
2     US      A          yy   50
40    Mexico  B          zz   20

表B:

Store Store_name
1     Store 1
2     Store 2

表C:

Item Item_name Dept Price
xx   xxxxxx    A    2
yy   xxxxyy    A    4

第一个问题: 在SQL中,我习惯于执行以下操作:

Select a.*, b.Store_name, c.Price  
    from A as a 
    left join B b on a.Store = b.Store
    left join C c on a.Item = c.Item and a.Department = c.Dept

如何在不使用SQL包的情况下联接多个表?具体是从每个表中选择某些列,以及当一个表在一个键上联接而另一个在两个键上联接时?

我能够使其正常工作的唯一方法是执行2 .merge 即 new_table = A.merge(B,left_on ='Store',right_on ='Store',how ='left') 然后我选择new_table然后与Table C合并

第二个问题:

使用表A,我有以下内容:

A['store_sums'] = A.groupby(['Store', 'Country', 'Department'])   
['Sales'].transform('sum')

这给了我按前三列进行的销售分组总和,然后我想将以上各部分除以“国家和部门”组合的平均销售收入,因此我将其写成另外几个步骤: 要获得我的店铺平均销售额,请使用:

store_c_d_avg = A[['Store', 'Country', 'Department', 'store_sums']].copy().drop_duplicates()

这将创建一个新的数据框,然后按其他列删除项目和组 然后,我使用:

store_avg = store_c_d_avg.groupby(['Country', 'Department'])['store_sums'].mean()

这给了我国家和部门的平均门店数。 然后,我将所有东西加入他们的行列,这样就可以得出每个商店的销售总和除以给定国家和部门分组的所有商店的平均值。

Store Country Department store_sums store_avg Store_sums/store_avg
1     US      A          20         35        0.57

是否有更好/更有效的方法?

0 个答案:

没有答案