Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Pandas 熊猫:按整数表示法值排序_Pandas_Sorting - Fatal编程技术网

Pandas 熊猫:按整数表示法值排序

Pandas 熊猫:按整数表示法值排序,pandas,sorting,Pandas,Sorting,在此数据帧中,列键值对应于每个歌曲键的整数表示法 df track key 0 Last Resort 4 1 Casimir Pulaski Day 8 2

在此数据帧中,列
值对应于每个歌曲键的整数表示法

    df
                                                track    key  
    0                                        Last Resort     4  
    1                                Casimir Pulaski Day     8  
    2                                         Glass Eyes     8   
    3                    Ohio - Live At Massey Hall 1971     7   
    4                               Ballad of a Thin Man    11  
    5                               Can You Forgive Her?    11   
    6                                     The Only Thing     3    
    7                        Goodbye Baby (Baby Goodbye)     4    
    8                                     Heart Of Stone     0   
    9                                               Ohio     0   
    10                                          the gate     2   
    11                                         Clampdown     2    
    12                                     Cry, Cry, Cry     4   
    13                          What's Happening Brother     8   
    14                                       Stupid Girl    11   
    15                          I Don't Wanna Play House     7   
    16           Inner City Blues (Make Me Wanna Holler)    11   
    17              The Lonesome Death of Hattie Carroll     4   
    18  Paint It, Black - (Original Single Mono Version)     5  
    19                                  Let Him Run Wild    11    
    20            Undercover (Of The Night) - Remastered     5    
    21                                  Between the Bars     7   
    22                              Like a Rolling Stone     0   
    23                                              Once     2   
    24                                    Pale Blue Eyes     5   
    25          The Way You Make Me Feel - 2012 Remaster     1   
    26                                            Jeremy     2   
    27                                   The Entertainer     7   
    28                                          Pressure     9   
    29   Play With Fire - Mono Version / Remastered 2002     2   
    30                                     D-I-V-O-R-C-E     9   
    31                                          Big Shot     0   
    32                                   What's Going On     1   
    33                        Folsom Prison Blues - Live     0   
    34                                    American Woman     1  
    35                              Cocaine Blues - Live     8   
    36                                       Jesus, etc.     5    
符号如下:

'C' --> 0
'C#'--> 1
'D' --> 2
'Eb'--> 3
'E' --> 4
'F' --> 5
'F#'--> 6
'G' --> 7
'Ab'--> 8
'A' --> 9
'Bb'--> 10
'B' --> 11
例如,这个符号的特殊之处在于
11
2
更接近
0

目标

给定
input\u notation=0
,我想根据与键
0
'C'
的接近程度进行排序

您可以通过执行以下操作获得最接近的值:

closest_key = (input_notation -1) % 12 
所以我想根据这个逻辑排序,在顶部有
输入符号
,然后是最接近的匹配,如下所示:

    8                                     Heart Of Stone     0   
    9                                               Ohio     0 
    22                              Like a Rolling Stone     0   
    31                                          Big Shot     0   
    33                        Folsom Prison Blues - Live     0  
   (...) 
我试过:

v = df[['key']].values

df = df.iloc[np.lexsort(np.abs(v - (input_notation - 1) %12 ).T)]
但这是行不通的


有什么线索吗?

您可以先定义接近度,然后使用
argsort
iloc
对数据帧进行排序:

input_notation = 0

# define the closeness or distance
diff = (df.key - input_notation).abs()
closeness = np.minimum(diff, 12 - diff)

# use argsort to calculate the sorting index, and iloc to reorder the data frame
closest_to_input = df.iloc[closeness.argsort(kind='mergesort')]

closest_to_input.head()
#                        track  key
#8              Heart Of Stone    0
#9                        Ohio    0
#22       Like a Rolling Stone    0
#31                   Big Shot    0
#33 Folsom Prison Blues - Live    0