使用总计百分比(数据透视表中所有数据的总和)将以下数据透视表中的所有非零值更改为饼图的最佳方法是什么?
import pandas as pd
import matplotlib.pyplot as plt
df=pd.DataFrame({'axis1': ['Unix','Window','Apple','Linux'],
'A': [3,0,1,10],
'B': [1,0,0,0],
'C': [0,30,0,20],
'D': [1,0,12,0],
}).set_index(['axis1'])
输出:
>>> df
A B C D
axis1
Unix 3 1 0 1
Window 0 0 30 0
Apple 1 0 0 12
Linux 10 0 20 0
[4 rows x 4 columns]
所以基本上我想从数据透视表中创建一个饼图,其中存在值并使用诸如' Unix A'之类的标签。值为3 / sum =表中所有内容的百分比。
答案 0 :(得分:2)
您可以使用matplotlib绘制饼图(例如,请参阅http://matplotlib.org/1.2.1/examples/pylab_examples/pie_demo.html)。
首先堆叠您的数据(以便不同的列成为索引级别,请参阅stack docs),然后只选择正数:
In [13]: s = df.stack()
In [14]: s = s[s>0]
In [15]: s
Out[15]:
axis1
Unix A 3
B 1
D 1
Window C 30
Apple A 1
D 12
Linux A 10
C 20
dtype: int64
然后你可以使用matplotlib pie
来绘制它(对于标签,我将列表的两个级别粘贴在列表推导中):
In [16]: fig, ax = plt.subplots()
...: ax.pie(s, labels=["{0} {1}".format(l1, l2) for l1, l2 in s.index],
...: autopct='%1.1f%%')
导致此输出: