2017-02-10 7 views
2

Ich möchte die folgenden Daten als ein einzelnes Kreisdiagramm in Pandas/Matplotlib anzeigen. Was ist der clevere Weg, dies zu tun? Meine Methode scheint schlampig.Wrangling ein 2x2 DataFrame in eine 4x1-Serie (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() 

Datenrahmen:

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

Serie:

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

Antwort

1

Verwenden stack und dann konvertieren 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 

Eine andere Lösung:

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