当手动设置索引的顺序时,在pivot_table(Pandas图)中手动设置列的顺序

时间:2018-03-19 10:07:18

标签: python pandas matplotlib

我有以下代码:

from io import StringIO
import pandas as pd
import matplotlib.pyplot as plt

txt = '''Category    COLUMN1         COLUMN2     COLUMN3    
A          0.5               3          Cat1   
B          0.3               5          Cat1 
C          0.7               4          Cat1
A          0.4               3          Cat2
B          0.8               5          Cat2
C          0.3               4          Cat2
'''

df = pd.read_table(StringIO(txt), sep="\s+")

order = ['Cat2', 'Cat1']


col1 = pd.pivot_table(df,index='COLUMN3',columns='Category',values='COLUMN1').loc[order].plot(kind='bar')





plt.legend(bbox_to_anchor=(1.3, 0.5))

plt.show() 

产生以下结果:

Columns are ordered alphabetically

使用loc[order]我设法根据需要覆盖index的顺序。 但是,columns的顺序会按字母顺序自动排序,如上图所示。

我想在这里覆盖自动排序。这样我就可以实现以下目标:

Override the second ordering

有关如何实现这一目标的任何建议?

1 个答案:

答案 0 :(得分:1)

您似乎希望将数据框的列重新排序为["A","B","C"]而不是from io import StringIO import pandas as pd import matplotlib.pyplot as plt txt = u'''Category COLUMN1 COLUMN2 COLUMN3 A 0.5 3 Cat1 B 0.3 5 Cat1 C 0.7 4 Cat1 A 0.4 3 Cat2 B 0.8 5 Cat2 C 0.3 4 Cat2 ''' df = pd.read_table(StringIO(txt), sep="\s+") order = ['Cat2', 'Cat1'] suborder = list("BAC") df2 = pd.pivot_table(df,index='COLUMN3',columns='Category',values='COLUMN1').loc[order] df2 = df2[suborder] df2.plot(kind='bar') plt.legend(bbox_to_anchor=(1.3, 0.5)) plt.show() 。通过使用所需的列索引数据框,可以轻松执行此操作。

public class DeviceHelper: NSObject {
}

enter image description here