我正在尝试使用“largest”获取前n个结果,但是行为有点奇怪。如果有人能帮助我理解为什么会这样,那就太好了。
filter = pd.DataFrame([['user1','item2',2,1],
['user1','item1',2,0.666667],
['user1','item3',2,0.500000]],
columns=['user_id','item_id','num_transactions','RCP'])
sort_RCP_df = (
filter.set_index("item_id")
.groupby(["user_id"])["RCP"]
.nlargest(2)
.reset_index()
)
print(sort_RCP_df)
user_id item_id RCP
user1 item2 1.000000
user1 item1 0.666667
如果我保留 nlargest(2),那么会得到正确的输出,但如果我将其更改为 3,那么只会得到 item_id 和 RCP 两列。
filter = pd.DataFrame([['user1','item2',2,1],
['user1','item1',2,0.666667],
['user1','item3',2,0.500000]],
columns=['user_id','item_id','num_transactions','RCP'])
sort_RCP_df = (
filter.set_index("item_id")
.groupby(["user_id"])["RCP"]
.nlargest(3)
.reset_index()
)
print(sort_RCP_df)
item_id RCP
item2 1.000000
item1 0.666667
item3 0.500000
为什么使用 nlargest = 3 后列 'user_id' 没有出现?
如果这是期望的行为,是否有办法让 'user_id' 也成为输出的一部分?
df.set_index(["item_id", "user_id"]).groupby("user_id")["RCP"].nlargest(3).reset_index()
- not_speshal