我得到了一个结果列表,我想按两个条件对它们进行排序。 我先对sys列进行了排序:
systems = {'BzBz_S':0,'BzBz_PD34':1,'MeMe':2}
sorted_results = sorted(results, key = lambda e: (systems[e[0]]))
并传递给DataFrame
df = pd.DataFrame(sorted_results,columns = ['sys','dis','basis','Energy'])
这给了我以下输出:
,sys,dis,system,basis,Energy
0,BzBz_S,10.0,BzBz_S_10.0,S,0.02562465
1,BzBz_S,3.2,BzBz_S_3.2,S,1.48510297
2,BzBz_S,3.3,BzBz_S_3.3,S,-0.25086498
3,BzBz_S,6.0,BzBz_S_6.0,S,-0.11827975
4,BzBz_S,3.9,BzBz_S_3.9,S,-2.44705244
5,BzBz_PD34,0.4,BzBz_PD34_0.4,PD34,-1.88172312
6,BzBz_PD34,0.2,BzBz_PD34_0.2,PD34,-1.50519034
7,MeMe,5.0,MeMe_5.0,5,-0.12194283
8,MeMe,5.4,MeMe_5.4,5,-0.07556324
除sys外,我如何创建第二个排序条件来对dis列进行排序,以获得最终结果:
,sys,dis,system,basis,Energy
0,BzBz_S,3.2,BzBz_S_3.2,S,1.48510297
1,BzBz_S,3.3,BzBz_S_3.3,S,-0.25086498
2,BzBz_S,3.9,BzBz_S_3.9,S,-2.44705244
3,BzBz_S,6.0,BzBz_S_6.0,S,-0.11827975
4,BzBz_S,10.0,BzBz_S_10.0,S,0.02562465
5,BzBz_PD34,0.2,BzBz_PD34_0.2,PD34,-1.50519034
6,BzBz_PD34,0.4,BzBz_PD34_0.4,PD34,-1.88172312
7,MeMe,5.0,MeMe_5.0,5,-0.12194283
8,MeMe,5.4,MeMe_5.4,5,-0.07556324
答案 0 :(得分:1)
获得第一个输出后,可以执行以下操作以获得最终输出,希望这会有所帮助!
df['sys_cat']=df['sys'].astype('category') #creating a categorical column in the dataframe
d = dict(zip(df.sys_cat,df.sys_cat.cat.codes)) # converting categorical column into codes
# reassigning categories
count=0
for i in d:
d[i]=count
count+=1
df['sys_cat']=df['sys_cat'].map(d).astype(int)
df.sort_values(by=['sys_cat', 'dis'],ascending=[True, True], inplace=True)
df.drop(['sys_cat'], inplace=True, axis=1)
df.reset_index(inplace=True, drop=True)
df
给予:
sys dis system basis Energy
0 BzBz_S 3.2 BzBz_S_3.2 S 1.485103
1 BzBz_S 3.3 BzBz_S_3.3 S -0.250865
2 BzBz_S 3.9 BzBz_S_3.9 S -2.447052
3 BzBz_S 6.0 BzBz_S_6.0 S -0.118280
4 BzBz_S 10.0 BzBz_S_10.0 S 0.025625
5 BzBz_PD34 0.2 BzBz_PD34_0.2 PD34 -1.505190
6 BzBz_PD34 0.4 BzBz_PD34_0.4 PD34 -1.881723
7 MeMe 5.0 MeMe_5.0 5 -0.121943
8 MeMe 5.4 MeMe_5.4 5 -0.075563