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

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

Pandas 中的 sort_values() 行為與文檔相反

Pandas 中的 sort_values() 行為與文檔相反

皈依舞 2021-09-25 13:30:56
我對 Pandas 中 sort_values() 的行為感到困惑,它似乎沒有對軸參數做出適當的響應。以玩具為例:toy.to_json()'{"labels":{"0":7,"1":4,"2":7,"3":1,"4":5,"5":0,"6":3,"7":1,"8":4,"9":9},"companies":{"0":"Apple","1":"AIG","2":"Amazon","3":"American express","4":"Boeing","5":"Bank of America","6":"British American Tobacco","7":"Canon","8":"Caterpillar","9":"Colgate-Palmolive"}}'toy.sort_values('labels') # this works alrightlabels  companies5   0   Bank of America3   1   American express7   1   Canon6   3   British American Tobacco1   4   AIG8   4   Caterpillar4   5   Boeing0   7   Apple2   7   Amazon9   9   Colgate-Palmolivetoy.sort_values(by = 'labels', axis = 1) # Returns an exceptionKeyError: 'labels'
查看完整描述

6 回答

?
守候你守候我

TA貢獻1802條經驗 獲得超10個贊

這是因為在您的示例中,軸 0 是“向下”,而 1 是“右”(即,跨列)如果您查看sort_values的文檔,您會看到第一個參數確實是by,并且默認值axis是0. 所以你重復你的第一個例子,你需要執行toy.sort_values(by='labels', axis=0)


查看完整回答
反對 回復 2021-09-25
?
Helenr

TA貢獻1780條經驗 獲得超4個贊

在上面的評論和答案中添加一個例子:


假設您有一個如下所示的數據框:


df = pd.DataFrame(data={"labels":{"0":7,"1":4,"2":7,"3":1,"4":5},"companies":{"0":9,"1":1,"2":6,"3":1,"4":8}})

>>df

    labels  companies

0   7       9

1   4       1

2   7       6

3   1       1

4   5       8

對于axis=0,它會在您傳遞索引級別和/或列標簽時進行排序:


df.sort_values(by='labels')

它為您提供一個排序的label列(默認情況下升序)。


   labels   companies

3   1       1

1   4       1

4   5       8

0   7       9

2   7       6

來了axis=1,參考下面的代碼:


df.sort_values('4',axis=1)

這將以排序的方式對列進行index 4排序。在這里它不會改變任何東西,因為 forindex 4因為5小于8并且默認情況下排序是ascending. 但是,如果你執行df.sort_values('1',axis=1)其中值下label超過companies,你將看到的位置labels,并companies已被更換。


    companies   labels

0   9           7

1   1           4

2   6           7

3   1           1

4   8           5


查看完整回答
反對 回復 2021-09-25
?
繁星coding

TA貢獻1797條經驗 獲得超4個贊

只是為了在我們選擇axis=1或時了解要清除的軸和行axis=0。


df.shape[0]  # gives number of row count

df.shape[1]  # gives number of col count

讓我們假設一個數據幀如下:


>>> df = pd.DataFrame({

...     'col1' : ['A', 'A', 'B', np.nan, 'D', 'C'],

...     'col2' : [2, 1, 9, 8, 7, 4],

...     'col3': [0, 1, 9, 4, 2, 3],

... })


>>> df

  col1  col2  col3

0    A     2     0

1    A     1     1

2    B     9     9

3  NaN     8     4

4    D     7     2

5    C     4     3

因此,應用 df.shape 并查看它如何圍繞列和行旋轉:


>>> df.shape[0]

6            <-- Here, we have six row into the dataFrame

>>> df.shape[1]

3            <-- Here, we have three columns into the dataFrame

現在,如果您只是按列名對值進行排序,則無需指定,axis=1因為已指定列名,您可以簡單地執行以下操作:


>>> df.sort_values(by=['col1'])

  col1  col2  col3

0    A     2     0

1    A     1     1

2    B     9     9

5    C     4     3

4    D     7     2

3  NaN     8     4

或者,您可以將多個列名作為列表傳遞by:


>>> df.sort_values(by=['col1', 'col2'])

  col1  col2  col3

1    A     1     1

0    A     2     0

2    B     9     9

5    C     4     3

4    D     7     2

3  NaN     8     4


查看完整回答
反對 回復 2021-09-25
  • 6 回答
  • 0 關注
  • 351 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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