如何以非字母顺序根据名称对大熊猫进行排序

时间:2020-01-02 17:59:41

标签: python excel pandas sorting alphabetical

我的公司要求我解决一个基本的编程问题(我是Python的新手)。

如果我在Excel文件中有一个具有以下布局的数组:

Panel Value
Left  70
Right 50
Top   30

由于代码生成的csv文件按字母顺序对列进行排序;我希望它以以下格式写入Excel:

Panel Value
Left  70
Top   30
Right 50

到目前为止,我对一个csv文件进行排序的代码是:

import pandas as pd
from pandas import ExcelWriter
from pandas import ExcelFile
import xlrd

df = pd.read_excel('Test.xlsx')
df.sort_values(["Panel","Value"], axis=0, 
                 ascending=[True,False], inplace=True) 
df.to_csv('Output2.csv')
print(df)

3 个答案:

答案 0 :(得分:3)

从评论中我了解到您想进行“手动”排序。因此,在这种情况下,我们必须通过将列表传递到DataFrame.reindex来对其进行加固:

df = df.set_index('Panel').reindex(['Left', 'Top', 'Right']).reset_index()

   Panel  Value
0   Left     70
1    Top     30
2  Right     50

完整的示例

df = pd.DataFrame({'Panel':['Left', 'Right', 'Top'],
                   'Value':[70, 50, 30]})
print(df, '\n')


df = df.set_index('Panel').reindex(['Left', 'Top', 'Right']).reset_index()
print(df)
   Panel  Value
0   Left     70
1  Right     50
2    Top     30 

   Panel  Value
0   Left     70
1    Top     30
2  Right     50

Process finished with exit code 0

答案 1 :(得分:1)

您还可以在此处将 pd.Categorical ordered=True结合使用,以根据类别顺序进行排序:

df['Panel'] = pd.Categorical(df['Panel'],categories=['Left','Top','Right'],ordered=True)
final = df.sort_values('Panel')

   Panel  Value
0   Left     70
2    Top     30
1  Right     50

答案 2 :(得分:0)

此代码将满足您的特定要求。


df = pd.read_excel('Test.xlsx')

data=[]
data.append([df['Panel'][0],df['Value'][0]])
data.append([df['Panel'][2],df['Value'][2]])
data.append([df['Panel'][1],df['Value'][1]])
df = pd.DataFrame(data, columns = ['Panel', 'Value'])
df.to_csv('Output2.csv',index=False)

我假设输入文件始终具有以下顺序:左,右,上。

或者简单地

df = pd.read_excel('Test.xlsx')
df = df.set_index('Panel').reindex(['Left', 'Top', 'Right'])
df.to_csv('Output2.csv')