我的数据是:
import pandas
A=pandas.read_csv(r'D:\AUL_prediction\Merge_file\plasmid',sep=' ',header=None, engine='python')
print A
结果是:
0 1 2 3
0 plasmid.gb NC021289.1 75
1 plasmid.gb NC016815.1 763
2 plasmid.gb NZCP011480.1 102
3 plasmid.gb NC017324.1 1278
4 plasmid.gb NC007488.2 32
5 plasmid.gb NC019848.2 632
6 plasmid.gb NZCP007644.1 208
7 plasmid.gb NC007336.1 46
8 plasmid.gb NZCP012748.1 402
9 plasmid.gb NZCP011248.1 353
我想根据A [3]和A [2]对这些数据进行排序,任何人都知道如何做到这一点?我尝试了sort_values,但它无法识别列名' 0'或者' 1'
答案 0 :(得分:1)
首先选择:
f = A.columns.values.tolist()
要查看列的实际名称是什么。 然后你可以尝试:
A.sort_values(by=f[:2])
如果按列名排序,请记住2L是一个长整数,所以只需转到:
A.sort_values(by=[2L])
答案 1 :(得分:1)
这个问题很旧,但是我刚刚遇到了这个问题!
当您没有列标题时,只需提供值并避免在by
中使用关键字df.sort_values
。解决方案:
df = df.sort_values(df.columns[i])
这里的df是A
,而i
是列的索引。
答案 2 :(得分:0)
我不确定您为什么坚持不使用标题
如果那是原始数据,那么那不是问题
您可以将标题分配给DataFrame,这对于程序员来说更易读。
import pandas as pd
from io import StringIO
data = """
plasmid.gb,NC021289.1,75
plasmid.gb,NC016815.1,763
plasmid.gb,NZCP011480.1,102
plasmid.gb,NC017324.1,1278
plasmid.gb,NC007488.2,32
plasmid.gb,NC019848.2,632
plasmid.gb,NZCP007644.1,208
plasmid.gb,NC007336.1,46
plasmid.gb,NZCP012748.1,402
plasmid.gb,NZCP011248.1,3
"""
df = pd.read_csv(StringIO(data), sep=',', header=None, engine='python')
print('BEFORE\n', df)
df.columns = ['file', 'event-id', 'value']
print('\nAFTER\n', df.sort_values(['value', 'event-id'], ascending=[False, True]))
输出
BEFORE
0 1 2
0 plasmid.gb NC021289.1 75
1 plasmid.gb NC016815.1 763
2 plasmid.gb NZCP011480.1 102
3 plasmid.gb NC017324.1 1278
4 plasmid.gb NC007488.2 32
5 plasmid.gb NC019848.2 632
6 plasmid.gb NZCP007644.1 208
7 plasmid.gb NC007336.1 46
8 plasmid.gb NZCP012748.1 402
9 plasmid.gb NZCP011248.1 3
AFTER
file event-id value
3 plasmid.gb NC017324.1 1278
1 plasmid.gb NC016815.1 763
5 plasmid.gb NC019848.2 632
8 plasmid.gb NZCP012748.1 402
6 plasmid.gb NZCP007644.1 208
2 plasmid.gb NZCP011480.1 102
0 plasmid.gb NC021289.1 75
7 plasmid.gb NC007336.1 46
4 plasmid.gb NC007488.2 32
9 plasmid.gb NZCP011248.1 3