亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何根據包含所需順序的預定義數組對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 關注
  • 112 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號