按特定列排序,但将具有相同主索引的项目放在一起

时间:2019-07-22 19:39:02

标签: python pandas

如果我有一个如下所示的数据框,其中user和item是索引。

user        item        value
2           a           5555
            b           7777
3           c           9999
            d           2222
1           e           6666

我将如何对值进行相应的排序,但是如果两个项目具有相同的用户,则无论如何将它们保持在一起?

user        item        value
3           c           9999
            d           2222
2           b           7777
            a           5555
1           e           6666.

要获得类似上面的内容。按用户的最大值进行排序,但具有相同用户的项目将保持在一起。

2 个答案:

答案 0 :(得分:2)

IIUC,您要按每个组中的最大值排序,然后按每行的值排序:

Name: All-Projections
StreamName: $events
Position: 1200 <-- This is updated by the observer as it reads
BufferSize: 100 <-- Number of records to read at a time

Name: Customers-Rebuild
StreamName: $events-CustomerAggregate
Position: 0 <-- This consumer has not run yet
BufferSize: 100

输出:

# max value for each user
df['max_val'] = df.groupby('user')['value'].transform('max')
(df.sort_values(['max_val', 'user', 'value'], ascending=False)
   .drop('max_val', axis=1) # drop the max value 
)

答案 1 :(得分:-1)

尝试此操作即可。不知道您的表架构的正确名称,但我假设项目和用户具有ID。 table1table2

SELECT `user_id`, `user`, `item_id`, `item`
FROM `table1`.`users`
LEFT JOIN `table2`.`items` ON
`user`.`user_id` ON `item_id`.`user_id`
WHERE `users`.`user` IS NOT NULL GROUP BY `users`.`usr_id` ORDER BY `item`.`item_id` 
DESC, `item_id` ASC