2016-10-10 7 views
0

Ich habe folgende Quelldaten (die aus einer CSV-Datei kommt):Horizontales Balkendiagramm auf Pandas Datenrahmen mit dynamischem Spaltennamen

ABC,2016-6-9 0:00,95,"{'//Purple': [115L], '//Yellow': [403L], '//Blue': [16L], '//White-XYZ': [0L]}" 
ABC,2016-6-10 0:00,0,"{'//Purple': [219L], '//Yellow': [381L], '//Blue': [90L], '//White-XYZ': [0L]}" 
ABC,2016-6-11 0:00,0,"{'//Purple': [817L], '//Yellow': [21L], '//Blue': [31L], '//White-XYZ': [0L]}" 
ABC,2016-6-12 0:00,0,"{'//Purple': [80L], '//Yellow': [2011L], '//Blue': [8888L], '//White-XYZ': [0L]}" 
ABC,2016-6-13 0:00,0,"{'//Purple': [32L], '//Yellow': [15L], '//Blue': [4L], '//White-XYZ': [0L]}" 
DEF,2016-6-16 0:00,0,"{'//Purple': [32L], '//Black': [15L], '//Pink': [4L], '//NPO-Green': [3L]}" 
DEF,2016-6-17 0:00,0,"{'//Purple': [32L], '//Black': [15L], '//Pink': [4L], '//NPO-Green': [0L]}" 
DEF,2016-6-18 0:00,0,"{'//Purple': [32L], '//Black': [15L], '//Pink': [4L], '//NPO-Green': [7L]}" 
DEF,2016-6-19 0:00,0,"{'//Purple': [32L], '//Black': [15L], '//Pink': [4L], '//NPO-Green': [14L]}" 
DEF,2016-6-20 0:00,0,"{'//Purple': [32L], '//Black': [15L], '//Pink': [4L], '//NPO-Green': [21L]}" 

ich How to remove curly braces, apostrophes and square brackets from dictionaries in a Pandas dataframe (Python) verwenden diese Daten in einen Datenrahmen zu transformieren, dass ich Verwenden Sie, um bestimmte Variablen zu plotten. Der Datenrahmen sieht wie folgt aus (Anmerkung: nicht die gleichen Daten wie, was in der Quelle CSV-Datei, aber die Struktur ist die gleiche):

Company Date   Code  Yellow  Blue  White  Black 

0 ABC  2016-6-9  115  403   16   19   472  
1 ABC  2016-6-10 219  381   90   20   2474 
2 ABC  2016-6-11 817  21   31   88   54 
3 ABC  2016-6-12 80   2011  8888  0   21 
4 ABC  2016-6-13 21   15   46   20   56 
5 DEF  2016-6-16 64   42   76   4   41 
6 DEF  2016-6-17 694  13   84   50   986 
7 DEF  2016-6-18 325  485   38   60   174 
8 DEF  2016-6-19 418  35   174  251  11 
9 DEF  2016-6-20 50   56   59   19   03 

ich mehrere Zeitreihen-Plots der Farben erstellen müssen (was ich kann sehr leicht, angesichts der Art, wie der Datenrahmen konstruiert ist).

Aber ich möchte auch in der Lage sein, ein horizontales Balkendiagramm ab einem bestimmten Datum (siehe https://stanford.edu/~mwaskom/software/seaborn/examples/horizontal_barplot.html für ein Beispiel) zu machen.

Zum Beispiel meiner Daten verwenden, wie vom 9. Juni 2016 würde das Balkendiagramm wie folgt aussehen (nicht maßstäblich):

Black: ******************************** 

Yellow: ************************** 

White: *** 

Blue:  ** 

Das Problem, das ich habe, ist, dass die Spaltennamen (zB 'gelb', 'blau', 'weiß' und 'schwarz' können sich ändern, ebenso die Anzahl der Spalten.

Weiß jemand, ob es möglich ist, eine bestimmte Anzahl von Spalten nach rechts der 'Code'-Spalte durchzuschleifen und dann diese zu verwenden, um ein horizontales Balkendiagramm zu erstellen, ähnlich wie oben? Oder nehmen Sie vielleicht ein Stück der Daten rechts neben der Spalte "Code"?

Oder muss der Datenrahmen selbst so strukturiert sein, dass er sowohl als Zeitreihendiagramm als auch als horizontales Balkendiagramm verwendet werden kann?

Danke!

Antwort

0

um eine Schleife durch eine bestimmte Anzahl von Spalten rechts von der Spalte ‚Code‘ ich etwas von der Form tun würde

for col in df.columns[3:]: 
    plot(col) 

Das funktioniert jedoch nur, wenn Sie garantieren können, dass Ihre Spalten werden immer in der gleichen Reihenfolge sein. Alternativ können Sie sicherstellen, dass die für das jeweilige Diagramm interessanten Spalten systematisch benannt werden.

Hoffe, das hilft!

0

IIUC können Sie es auf diese Weise tun:

Original-DF:

In [127]: df 
Out[127]: 
    Company  Date Code Yellow Blue White Black 
0  ABC 2016-06-09 115  403 16  19 472 
1  ABC 2016-06-10 219  381 90  20 2474 
2  ABC 2016-06-11 817  21 31  88  54 
3  ABC 2016-06-12 80 2011 8888  0  21 
4  ABC 2016-06-13 21  15 46  20  56 
5  DEF 2016-06-16 64  42 76  4  41 
6  DEF 2016-06-17 694  13 84  50 986 
7  DEF 2016-06-18 325  485 38  60 174 
8  DEF 2016-06-19 418  35 174 251  11 
9  DEF 2016-06-20 50  56 59  19  3 

Date als Index gesetzt:

In [128]: df = df.set_index('Date') 

In [129]: df 
Out[129]: 
      Company Code Yellow Blue White Black 
Date 
2016-06-09  ABC 115  403 16  19 472 
2016-06-10  ABC 219  381 90  20 2474 
2016-06-11  ABC 817  21 31  88  54 
2016-06-12  ABC 80 2011 8888  0  21 
2016-06-13  ABC 21  15 46  20  56 
2016-06-16  DEF 64  42 76  4  41 
2016-06-17  DEF 694  13 84  50 986 
2016-06-18  DEF 325  485 38  60 174 
2016-06-19  DEF 418  35 174 251  11 
2016-06-20  DEF 50  56 59  19  3 

In [130]: cols = df.drop(['Company','Code'], 1).columns.tolist() 

In [131]: cols 
Out[131]: ['Yellow', 'Blue', 'White', 'Black'] 

In [139]: %paste 
import matplotlib 
matplotlib.style.use('ggplot') 

In [140]: df.ix['2016-06-09', cols].plot.barh(rot=0, color=cols) 
Out[140]: <matplotlib.axes._subplots.AxesSubplot at 0x1890a898> 

enter image description here

oder wenn Sie Grundstück zu wollen, ist sortiert:

In [142]: srt = df.ix['2016-06-09', cols].sort_values() 

In [143]: srt.plot.barh(color=srt.index) 
Out[143]: <matplotlib.axes._subplots.AxesSubplot at 0x1cf16748> 

Verwandte Themen