排列和合并Dataframe

时间:2018-06-15 12:46:14

标签: python pandas dataframe

好的,这在代码的许多部分比一个特定的问题更具问题。我没有做到这一点。

假设我有2个数据帧:

**DF1   = Orders**
Ordes N    Customer    Product  Color  Date of delivery   Qty   Amount
A12        John        INJ12      Blue   10/10/2018         5      100,00
A12        John        INJ13      Green  10/10/2018         10     200,00
A13        Francis     COB01      Brown  01/08/2018         2      50,00
A14        Mike        ACE05      Blue   08/08/2018         20     80,00


**DF2   = Inventory**
Orders     Product    Color   Qty
A12        INJ13      Green   5
A12        INJ13      Green   3
A12        INJ12      Gray    5
A14        ACE05      Blue    20

我想做的是通过订单获得库存的马赫订单并得到类似的内容:

Ordes N    Customer  Date of delivery   Product    Color  Inv Qty   OrderQty   
A12        john      10/10/2018         INJ13      Green  8         10
                                        INJ12      Blue   0         5
                                        INJ12      Gray   5         0
A13        Francis   01/08/2018         COB01      Brown  0         2
A14        Mike      08/08/2018         ACE05      Blue   20        20

我在做的是: 第1步

DF2[reference] = DF2[Order N] + DF2[Product] + DF2[Color]
**DF2.GROUPBY([reference,Order N,Product,Color])[Qty].sum()**

第二行代码给了我重复的值。我不知道为什么。

第2步

DF1[reference] = DF2[Order N] + DF2[Product] + DF2[Color]

    **DF2.GROUPBY([reference,Order N,Product,Color])[Qty].sum()**

第3步

df1_2 = pd.merge(left = DF1,right = DF2,right_on='reference',left_on
='reference')

现在我得到了许多我不能继续的奇怪价值观。

任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

您首先应groupby df2 sum数量

df2.groupby(['Orders','Product','Color']).Qty.sum()
s=pd.concat([df1.set_index(['OrdesN','Product','Color']),df2],1)
s[['Customer','Dateofdelivery']]=s[['Customer','Dateofdelivery']].ffill()
s=s.fillna(0)
s
Out[145]: 
                Customer Dateofdelivery   Qty  Amount   Qty
A12 INJ12 Blue      John     10/10/2018   5.0  100,00   0.0
          Gray      John     10/10/2018   0.0       0   5.0
    INJ13 Green     John     10/10/2018  10.0  200,00   8.0
A13 COB01 Brown  Francis     01/08/2018   2.0   50,00   0.0
A14 ACE05 Blue      Mike     08/08/2018  20.0   80,00  20.0