Python中的SQLish窗口函数

时间:2019-03-29 16:41:43

标签: python pandas

我正在尝试在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),很奇怪,该错误已得到解决。

1 个答案:

答案 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