Pandas 参考一列降序排列三个列表列
Pandas sort three list columns in descending order with reference to one column
我有一个这样的 pandas 数据框:
df =
userid item_id label score
1 [1, 2, 3] [0, 0, 1] [0.2, 0.3, 0.5]
... ... ...
item_id
、 label
和 score
是 df 的相同大小的列表列(不限于大小 3)。我想按降序对 score
列进行排序,label
和 item_id
也应该参考 score
列的新顺序进行排序。
预期输出
df =
userid. item_id. truth score
1 [3, 2, 1] [1, 0, 0] [0.5, 0.3, 0.2]
是否可以在 Pandas 中执行此操作?
我是如何形成这个数据框的:
我原来有这个数据框:
df_original =
userid item_id label score
1 1 0 0.2
1 2 0 0.3
1 3 1 0.5
我打过:
df = df_original.groupby('user_id').agg(list)
如果有办法从df_original
实现Expected Output
,那也是可以的。
尝试 sort_values
和 groupby
再次转换为列表
(df_original.sort_values(['userid', 'score'], ascending=[True,False])
.groupby('userid').agg(list)
.reset_index()
)
编辑
如@Ben.T警告的那样,可以使其更简单
(df_original.sort_values('score', ascending=False)
.groupby('userid').agg(list)
.reset_index()
)
我有一个这样的 pandas 数据框:
df =
userid item_id label score
1 [1, 2, 3] [0, 0, 1] [0.2, 0.3, 0.5]
... ... ...
item_id
、 label
和 score
是 df 的相同大小的列表列(不限于大小 3)。我想按降序对 score
列进行排序,label
和 item_id
也应该参考 score
列的新顺序进行排序。
预期输出
df =
userid. item_id. truth score
1 [3, 2, 1] [1, 0, 0] [0.5, 0.3, 0.2]
是否可以在 Pandas 中执行此操作?
我是如何形成这个数据框的:
我原来有这个数据框:
df_original =
userid item_id label score
1 1 0 0.2
1 2 0 0.3
1 3 1 0.5
我打过:
df = df_original.groupby('user_id').agg(list)
如果有办法从df_original
实现Expected Output
,那也是可以的。
尝试 sort_values
和 groupby
再次转换为列表
(df_original.sort_values(['userid', 'score'], ascending=[True,False])
.groupby('userid').agg(list)
.reset_index()
)
编辑
如@Ben.T警告的那样,可以使其更简单
(df_original.sort_values('score', ascending=False)
.groupby('userid').agg(list)
.reset_index()
)