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——通过行标签或者行号索引行数据
posted @ 2018-06-10 20:51  freedomwater  阅读(1728)  评论(0编辑  收藏  举报
hljs.initLineNumbersOnLoad(); });