我现在有了一个数据框,并尝试按照#39;否。'排序。 dataframe就像:
No. value1 value2
0 NODE11 1654 14
1 NODE10 1710 817
2 NODE9 1162 23
3 NODE8 1883 198
4 no match 2303 0
5 NODE1 1098 67
6 NODE3 1488 78
7 NODE2 2426 49
8 NODE5 1974 90
9 NODE4 1767 11
10 NODE7 1708 26
11 NODE6 2418 248
我试过了:
df.to_csv('count.csv',index = False)
df = pd.read_csv('count.csv', thousands=',', parse_dates=['No.'])
df = df.sort_values(by=['No.', 'only can on this node'], ascending=[True, False])
df.to_csv('count.csv',index = False)
它的工作但是:
No. value1 value2
5 NODE1 1098 67
1 NODE10 1710 817 -------error
0 NODE11 1654 14 -------error
7 NODE2 2426 49
6 NODE3 1488 78
9 NODE4 1767 11
8 NODE5 1974 90
11 NODE6 2418 248
10 NODE7 1708 26
3 NODE8 1883 198
2 NODE9 1162 23
4 no match 2303 0
我不知道如何对此数据帧进行排序,因为此排序键是str + number。有任何想法吗?谢谢!
答案 0 :(得分:1)
您的列是一个字符串,并按此排序。
但是,您可以使用一列字符串和一列整数将No.
列解析为新数据框,对该数据框进行排序,并使用排序索引重新排列原始数据框。
df2 = df['No.'].str.extractall('([A-Za-z ]+)(\d+)?').reset_index(drop=True)
df2[1] = df2[1].astype(float)
df.loc[df2.sort_values([0,1]).index]
# returns:
No. value1 value2
5 NODE1 1098 67
7 NODE2 2426 49
6 NODE3 1488 78
9 NODE4 1767 11
8 NODE5 1974 90
11 NODE6 2418 248
10 NODE7 1708 26
3 NODE8 1883 198
2 NODE9 1162 23
1 NODE10 1710 817
0 NODE11 1654 14
4 no match 2303 0
答案 1 :(得分:0)
按字母顺序将其排序为字符串 您将要重命名 NODE1 - > NODE01 NODE2 - > NODE02 ... NODE9 - > NODE09 NODE10 - >节点10
因为NODE1 NODE12 NODE13 NODE1123123 NODE2 NODE3按字母顺序排序。
答案 2 :(得分:0)
当您按字符串排序时,它将按字母顺序排序(即9之前的10)。
我建议你创建一个引用列,删除“Node”,转换为整数,相应地排序并删除引用列。
e.g。
#split into sortable and not
df_to_sort = df.ix[df['No.'] != "no match",:]
df_to_not_sort = df.ix[df['No.'] == "no match",:]
#create a reference column
df_to_sort.ix[:,'reference'] = df_to_sort['No.'].str.replace("NODE","")
#convert type to an integer
df_to_sort.ix[:,'reference'] = df.ix[:,'reference'].astype(int)
#sort the sortable part
df_sorted = df_to_sort.sort_values('reference')
#drop the reference column
df_sorted = df_sorted.drop(['reference'],axis=1)
#append the non sorted (i.e. no match) section to the bottom
df = df_sorted.append([df_to_not_sort])
希望这有效!
仅供参考詹姆斯的回答更为简洁,使用它。