代码之家  ›  专栏  ›  技术社区  ›  Naga kiran

GroupBy操作后添加的重复列

  •  0
  • Naga kiran  · 技术社区  · 7 年前

    我试图在一个数据帧的单列上连续应用2个GroupBy操作,在应用GroupBy操作之后,会添加一个列,这不允许我应用第二个GroupBy,

    我找过类似的问题,找不到。这是一个正常的操作还是如何在GroupBy操作中消除多余的列。我尝试过更改 as_index , group_keys 选项,都不起作用。

    小精灵

    CAT CODE    CODE1   SUB
    0   NaN NaN NaN 123
    1   SKU NaN NaN NaN
    2   NaN 1000123 NaN NaN
    3   NaN 1000234 NaN NaN
    4   NaN NaN NaN 456
    5   LIQ NaN NaN NaN
    6   NaN NaN 1000345 NaN
    7   NaN NaN 1000534 NaN
    8   NaN NaN 1000433 NaN
    

    期待着去做

    df1.groupby(df1['SUB'].ffill()).ffill().groupby('SUB').bfill()
    

    GroupBy之后的电流输出(添加了额外的“Sub”列)

    df1.groupby(df1.SUB.ffill()).fill()
    
    
        SUB CAT CODE CODE1     SUB
    0   123 NaN NaN  NaN       123
    1   123 SKU NaN  NaN       123
    2   123 SKU 1000123 NaN    123
    3   123 SKU 1000234 NaN    123
    4   456 NaN NaN  NaN       456
    5   456 LIQ NaN  NaN       456
    6   456 LIQ NaN 1000345    456
    7   456 LIQ NaN 1000534    456
    8   456 LIQ NaN 1000433    456
    

    预期产量

        SUB CAT CODE    CODE1
    0   123 NaN NaN     NaN 
    1   123 SKU NaN     NaN 
    2   123 SKU 1000123 NaN 
    3   123 SKU 1000234 NaN 
    4   456 NaN NaN     NaN
    5   456 LIQ NaN     NaN
    6   456 LIQ NaN   1000345
    7   456 LIQ NaN   1000534
    8   456 LIQ NaN   1000433
    
    0 回复  |  直到 7 年前
        1
  •  1
  •   anky    7 年前

    在网上查找时,我发现GitHub中报告了一个bug,其中包括: https://github.com/pandas-dev/pandas/issues/21521

    作为解决方法,尝试:

    df.groupby(df.SUB.ffill())[df.columns.difference(['SUB'])].ffill()
    

         SUB  CAT       CODE      CODE1
    0  123.0  NaN        NaN        NaN
    1  123.0  SKU        NaN        NaN
    2  123.0  SKU  1000123.0        NaN
    3  123.0  SKU  1000234.0        NaN
    4  456.0  NaN        NaN        NaN
    5  456.0  LIQ        NaN        NaN
    6  456.0  LIQ        NaN  1000345.0
    7  456.0  LIQ        NaN  1000534.0
    8  456.0  LIQ        NaN  1000433.0
    
        2
  •  1
  •   ALollz    7 年前

    使用 .fillna 指定方法。 .fillna(method='ffill') ,是 .ffill 但它不会被窃听为分组。

    df.groupby(df.SUB.ffill()).fillna(method='ffill')
    
       CAT       CODE      CODE1    SUB
    0  NaN        NaN        NaN  123.0
    1  SKU        NaN        NaN  123.0
    2  SKU  1000123.0        NaN  123.0
    3  SKU  1000234.0        NaN  123.0
    4  NaN        NaN        NaN  456.0
    5  LIQ        NaN        NaN  456.0
    6  LIQ        NaN  1000345.0  456.0
    7  LIQ        NaN  1000534.0  456.0
    8  LIQ        NaN  1000433.0  456.0