2017-02-10 3 views
2

Я хочу отобразить приведенные ниже данные в виде одной круговой диаграммы в pandas/matplotlib. Какой умный способ это сделать? Мой метод кажется неряшливым.Перетаскивание 2х2 DataFrame в серию 4x1 (Pandas)

import pandas as pd 
from pandas import DataFrame, Series 
matplotlib.style.use("ggplot") 

df = DataFrame({"Support": {"Pet Camper": 10, "Non-Pet Camper": 20}, 
       "Oppose": {"Pet Camper": 15, "Non-Pet Camper": 55}, 
       }) 
d = {} 
for r in df.index: 
    for c in df.columns: 
     d[r + ", " + c] = df[c][r] 
jd = Series(d) 

pie_d = Series(d).plot(kind="pie", autopct="%1.1f%%") 
plt.legend() 
plt.ylabel("") 
plt.title("Dedicated Pet Section?") 
plt.show() 

DataFrame:

     Oppose Support 
    Non-Pet Camper  55  20 
    Pet Camper   15  10 

Серия:

Non-Pet Camper, Oppose  15 
    Non-Pet Camper, Support 55 
    Pet Camper, Oppose   10 
    Pet Camper, Support  20 

ответ

1

Использование stack, а затем преобразовать MultiIndex в index:

s = df.stack() 
s.index = s.index.map(','.join) 
print (s) 
Non-Pet Camper,Oppose  55 
Non-Pet Camper,Support 20 
Pet Camper,Oppose   15 
Pet Camper,Support  10 
dtype: int64 

Другое решение:

s = df.stack() 
s.index = [''.join(idx) for idx in s.index] 
print (s) 
Non-Pet CamperOppose  55 
Non-Pet CamperSupport 20 
Pet CamperOppose   15 
Pet CamperSupport  10 
dtype: int64