我试图在数据帧的单个列上连续应用2个groupby操作,在应用groupby操作之后,又增加了一列,这不允许我应用第二个groupby,
我搜索了类似的问题,找不到。是正常操作还是如何在groupby操作中消除多余的列。我尝试更改as_index
,group_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
答案 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