2017-12-05 3 views
-1

Dies ist mein Pandas DF Struktur:Plot Kontakthäufigkeit ID in Kanal für eine Pandas DF

Id     channel  
0 0140268216898719 RIA   
2 022427195461267  Wire   
3 023552004060340  Ind   

Mit mehr Spalten, die nicht wichtig sind und mehr Daten.

Ich suche ein Histogramm mit Seaborn, um die Häufigkeit von contactId für jeden Kanal anzuzeigen, aber ich versage kläglich, egal was ich versuche.

So wie ich es sehe, kann ich entweder Gruppe Id durch den Kanal und ein Balkendiagramm haben (versucht wie folgt):

df=df['channel'].groupby(['Id']).count() #count occurrences of Id for each channel 

Ergebnisse in:

channel 
Ind   174 
RIA    60 
Wire   77 

Und

tips = sns.load_dataset("df") 
ax = sns.barplot(x="channel", y="Id", data=tips) 

HTTPError: HTTP-Fehler 404: Nicht gefunden

oder ein Histogramm des Kanales über die Frequenz von Id, etwa wie folgt:

sns.distplot(df, kde=False, rug=True) 

Hier I einen Plot mit Id auf x-Achse und die Frequenz zwischen 0 und 2 auf dem Y-Achse erhalten.

Mit anderen Worten, keine dieser Optionen bietet die Ausgabe, die ich brauche.

Kann jemand mir eine Hand geben, um die ursprünglich gegebenen Daten richtig zu plotten? Vielen Dank!

+1

'df.groupby ([ 'Id']) [ 'Kanal'] count() ' – Wen

+0

Der obige Kommentar löst wahrscheinlich das Rätsel, aber welche Fehler haben Sie erhalten? –

+0

@ Q.Holness aktualisiert – user8834780

Antwort

1

Ich tat tips = sns.load_dataset("df") gemäß der Dokumentation, aber das ist nichts anderes als eine Seaborn-Methode, Daten von CSV auf ihrem Server zu ziehen. Einfach geben data=df innerhalb barplot() extrahiert Daten aus meinem DF .. Die Anwendung Funktion, die ich hinzugefügt wurde, ist für eindeutige zählt statt nur zählen.

df=df.groupby(['channel'])['Id'].apply(lambda x:len(x.unique())).reset_index() 
print(df) 
sns.set(style='darkgrid') 
sns.barplot(x='channel', y='Id', data=df, palette='Set2') 
plt.show() 

--edit von Graf ab, um zu bestellen, schlage ich vor, so etwas wie dies zu tun:.

result = df.sort_values('Id',ascending=False) 
sns.barplot(x='channel', y='id', data=result, palette='Set2') 
+0

Bitte geben Sie eine Erklärung zusammen mit Ihrem Code. Andernfalls riskieren Sie, dass Ihre Antwort zum Löschen markiert wird. –