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

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

連接數據框后對特定列進行排序

連接數據框后對特定列進行排序

HUH函數 2022-11-09 16:59:07
我將 3 個數據幀連接成一個數據幀?,F在我想對一些特定的列進行排序,所以我使用了這段代碼:final_df.sort_values(['Tab1_1', 'Tab2_2'], ascending=False)但是,輸出按col1順序顯示值,但中的值col5不是。有人能告訴我我錯過了什么嗎?下面是一個數據示例:concat_table = {'ID': ['Sun_1'],                 'Tab1': ['Al', 'Alu', 'Alt'],                'Tab1_1': [6, 3, 4],                 '%_Tab_1': [90, 50, 40],                 'Tab2': ['Type1', 'Type2', 'Type3'],                 'Tab2_2': [4, 5, 2],                '%_Tab1_2': [60, 90, 40]}這是應該如何訂購的:concat_table_ordered = {'ID': ['Sun_1'],                         'Tab1': ['Al', 'Alt', 'Alu'],                        'Tab1_1': [6, 4, 3],                         '%_Tab_1': [90, 40, 50],                         'Tab2': ['Type2', 'Type1', 'Type3'],                         'Tab2_2': [5, 4, 2],                        '%_Tab1_2': [90, 60, 40]}
查看完整描述

2 回答

?
翻翻過去那場雪

TA貢獻2065條經驗 獲得超14個贊

如果在 pandas 中按多列排序sequentially,則表示首先按列表中的第一列,她Tab1_1的,然后按下一個值,但前提是前列中的值重復,這里Tab1_1:


concat_table={'ID':'Sun_1', 

              'Tab1': ['Al','Alu','Alt', 'aaa'],

              'Tab1_1':[6,3,4,4], 

              '%_Tab_1':[90,50,40,100],

              'Tab2':['Type1','Type2','Type3','Type4'],

              'Tab2_2':[4,5,2,1],

              '%_Tab1_2':[60,90,40,20]}

df = pd.DataFrame (concat_table)

print (df)

      ID Tab1  Tab1_1  %_Tab_1   Tab2  Tab2_2  %_Tab1_2

0  Sun_1   Al       6       90  Type1       4        60

1  Sun_1  Alu       3       50  Type2       5        90 <-4 are duplicated

2  Sun_1  Alt       4       40  Type3       2        40 <-4 are duplicated

3  Sun_1  aaa       4      100  Type4       1        20


df1 = df.sort_values(['Tab1_1','Tab2_2'], ascending=False)

print (df1)

      ID Tab1  Tab1_1  %_Tab_1   Tab2  Tab2_2  %_Tab1_2

0  Sun_1   Al       6       90  Type1       4        60

2  Sun_1  Alt       4       40  Type3       2        40 <-sorted 2,1 

3  Sun_1  aaa       4      100  Type4       1        20 <-sorted 2,1 

1  Sun_1  Alu       3       50  Type2       5        90

如果需要單獨排序,則必須先拆分列,排序然后分配回,但必須通過以下方式默認索引值reset_index(drop=True):


df1 = df.iloc[:, :4].sort_values(['Tab1_1'], ascending=False)

df2 = df.iloc[:, 4:].sort_values(['Tab2_2'], ascending=False)


final_df = pd.concat([df1.reset_index(drop=True), 

                      df2.reset_index(drop=True)], axis=1)

print (final_df)

      ID Tab1  Tab1_1  %_Tab_1   Tab2  Tab2_2  %_Tab1_2

0  Sun_1   Al       6       90  Type2       5        90

1  Sun_1  Alt       4       40  Type1       4        60

2  Sun_1  Alu       3       50  Type3       2        40


查看完整回答
反對 回復 2022-11-09
?
慕仙森

TA貢獻1827條經驗 獲得超8個贊

您是否將此輸出分配給另一個df?否則使用inplace=True

final_df.sort_values(['col1','col5'], ascending=False, inplace=True)


查看完整回答
反對 回復 2022-11-09
  • 2 回答
  • 0 關注
  • 136 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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