groupby操作后添加重复的列

时间:2019-03-24 16:30:17

标签: python pandas

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

我搜索了类似的问题,找不到。是正常操作还是如何在groupby操作中消除多余的列。我尝试更改as_indexgroup_keys选项,但均无效。

df1

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

2 个答案:

答案 0 :(得分:1)

在网上查找时,我发现github中报告了一个错误:original handleItemClick

作为解决方法,请尝试:

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

答案 1 :(得分:1)

使用.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