pandas中的argsort
直接通过例子看比较好理解.
import pandas as pd
data = [[1, 2, 3], [2, 2, 2], [7, 8, 9]]
df = pd.DataFrame(data, index=['a', 'b', 'c'], columns=['i', 'j', 'k'])
print(df)
'''
i j k
a 1 2 3
b 2 2 2
c 7 8 9
'''
value = 10
print((df.k - value).abs().argsort()) # 根据(df.k - value).abs()的方式来进行排序, 第k列的每个值都减去10, 然后对结果取绝对值之后进行比较, 按照其绝对值从小到大的顺序返回相应的行号. 这里从a~b行(0~2行)的运算结果为7, 8, 1, 故按从小到大进行排序应返回的行号为2, 0, 1, argsort()函数返回的是位置, 而不是其值
'''
a 2
b 0
c 1
'''
# 要特别注意上面的行标签并没有随着改动, 右面返回行号2, 0, 1
df = df.ix[(df.k - value).abs().argsort()]
'''
i j k
c 7 8 9
a 1 2 3
b 2 2 2
'''
# ix——通过行标签或者行号索引行数据