我有以下代码:
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()
产生以下结果:
使用loc[order]
我设法根据需要覆盖index
的顺序。
但是,columns
的顺序会按字母顺序自动排序,如上图所示。
我想在这里覆盖自动排序。这样我就可以实现以下目标:
有关如何实现这一目标的任何建议?
答案 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 {
}