为了账号安全,请及时绑定邮箱和手机立即绑定

如何根据包含所需顺序的预定义数组对pandas数据帧的值进行排序?

如何根据包含所需顺序的预定义数组对pandas数据帧的值进行排序?

慕容708150 2022-08-25 13:59:50
df = pd.DataFrame({'id': [1, 2, 3, 4, 5], 'p1': [0, 0, 1, 1, 2], 'p2': [9, 2, 3, 5, 3], 'p3': [1, 3, 10, 3, 7], 'p4': [4, 4, 7, 1, 10]})df = df.set_index('id')df    p1  p2  p3  p4id                1    0   9   1   42    0   2   3   43    1   3  10   74    1   5   3   15    2   3   7  10现在假设我有一个数据框,其中包含 df 数据帧的每个元素所需的行顺序位置。例如,比如说, order=np.argsort(-df.values,axis=1)orderarray([[1, 3, 2, 0],         [3, 2, 1, 0],         [2, 3, 1, 0],         [1, 2, 0, 3],         [3, 2, 1, 0]], dtype=int64)如何根据 order 数组的元素对 df 数据帧元素进行排序?期望的结果是    p1  p2  p3  p4id                1    9   4   1   02    4   3   2   03   10   7   3   14    5   3   1   15   10   7   3   2
查看完整描述

2 回答

?
偶然的你

TA贡献1841条经验 获得超3个赞

您可以使用通过numpy.take_along_axis提供的“花哨”索引来创建数据数组,然后重新创建整个 DataFrame。


pd.DataFrame(np.take_along_axis(df.to_numpy(), order, axis=1),

             index=df.index,

             columns=df.columns)

    p1  p2  p3  p4

id                

1    9   4   1   0

2    4   3   2   0

3   10   7   3   1

4    5   3   1   1

5   10   7   3   2


查看完整回答
反对 回复 2022-08-25
?
慕标琳琳

TA贡献1830条经验 获得超9个赞

创建一个如下所示的映射器,然后您可以执行以下操作:


mapper={0:'p1',1:'p2',2:'p3',3:'p4'}

df_copy=df.copy()

for index, row in df.iterrows():

    i=0

    for name, values in row.iteritems():


        df[name][index]=df_copy[mapper[order[index-1][i]]][index]

        i=i+1


查看完整回答
反对 回复 2022-08-25
  • 2 回答
  • 0 关注
  • 118 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号