代码之家  ›  专栏  ›  技术社区  ›  user1922364

排列和合并数据帧

  •  0
  • user1922364  · 技术社区  · 6 年前

    好吧,在代码的许多部分中,这更多的是一个问题,而不是一个特定的问题。我不明白这一点。

    假设我有两个数据帧:

    **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 回复  |  直到 6 年前
        1
  •  1
  •   BENY    6 年前

    你应该 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