我正在尝试在Python 3.6中执行类似SQL窗口函数的操作。我创建了以下发现here的代码,但出现以下错误:
“ ValueError:无法从重复的轴重新索引”
df = pd.DataFrame({'id' : ['daeb21718d5a','daeb21718d5a','daeb21718d5a'],
'product_id' : [123,456,789],
'probability' : [0.076838,0.053384, 0.843900 ]})
df['rank'] = df.sort_values(['probability'], ascending=False) \
.groupby(['id']) \
.cumcount() + 1
如果我在分组之前添加.reset_index(drop=True)
,很奇怪,该错误已得到解决。
答案 0 :(得分:0)
如果我对您的理解正确,则您正在尝试根据probability
的每组对id
进行降级。
您快到了,下面的方法可以解决您的问题:
df['rank'] = df.sort_values(['probability'], ascending=False) \
.groupby(['id'])['probability'] \
.cumcount() + 1
print(df)
id product_id probability rank
0 daeb21718d5a 123 0.076838 2
1 daeb21718d5a 456 0.053384 3
2 daeb21718d5a 789 0.843900 1
或者我们可以使用熊猫.rank
方法:
df['rank'] = df.groupby('id')['probability'].rank(ascending=False)
print(df)
id product_id probability rank
0 daeb21718d5a 123 0.076838 2.0
1 daeb21718d5a 456 0.053384 3.0
2 daeb21718d5a 789 0.843900 1.0