2016-05-19 13 views
1

Ich habe eine CSV-Datei, die wiederholte Elemente enthält. Der Grund, dass die Elemente wiederholt werden, ist, dass jede Zeile ein bestimmtes Darlehen angibt, das im Laufe der Zeit bezahlt wurde. Zum Beispiel wurde Darlehen mit ID = 156 in 5 Zahlungen bezahlt. Daher werden die Darlehensinformationen in jeder Zeile wiederholt, mit Ausnahme des Zahlungsbetrags und des Zahlungsdatums. Ich möchte ein Balkendiagramm der gezahlten Darlehen machen, aber das Zählen der bezahlten Darlehen durch das Zählen der Zeilen, deren Status bezahlt wird, funktioniert nicht, da es wiederholte Darlehen zählt. Ich frage mich, wie ich dieses Problem beheben sollte.Python Pandas Plot mit wiederholten Elementen

Hier ist mein Code:

loans[loans["status"]=="paid"] ["location.country"].value_counts().plot(kind="bar", fontsize=7) 

Dieser Code versucht, die Länder plotten, die ihre Kredite bezahlt, aber als ich sagte, dass es nicht richtig ist, wie loans["status"]=="paid" für ein Darlehen wahr sein könnte, die in mehreren Reihen wiederholt daher ist loans[loans["status"]=="paid"] ["location.country"].value_counts() die falsche Zählung. Hier

ist ein Beispiel dafür, wie Daten aus:

ID status paymentAmount paymentProcessDate  Country 
156 paid  $400   2/12/2009   CountryA 
156 paid  $123   2/11/2010   CountryA 
156 paid  $2000   2/09/2011   CountryA 
134 unpaid Nan   2/05/2013   CountryB 
134 unpaid Nan   2/07/2013   CountryB 
+0

Können Sie ein Beispiel geben? – IanS

+0

@lanS Ich habe die Frage aktualisiert. – HimanAB

+0

Sie können nach "ID" gruppieren, dann können Sie sicher sein, dass Sie jedes Darlehen nur einmal zählen. – IanS

Antwort

2

Hier ist eine Möglichkeit ID s, um herauszufiltern, die bereits bezahlt wurden.

import pandas as pd 
from io import StringIO 

df = pd.DataFrame.from_csv(StringIO('''ID status paymentAmount paymentProcessDate  Country 
156 paid  $400   2/12/2009   CountryA 
156 paid  $123   2/11/2010   CountryA 
156 paid  $2000   2/09/2011   CountryA 
134 unpaid Nan   2/05/2013   CountryB 
134 unpaid Nan   2/07/2013   CountryB'''), sep=r' +') 

paid_ids = df[df.status=='paid'].ID.drop_duplicates() 

unpaid = df[~df.ID.isin(paid_ids)] 

unpaid.Country.value_counts().plot(kind='bar') 
+0

Dies funktioniert nicht. Tatsächlich hat das reale Format der Daten mehr als 100 Spalten, so dass ich sie nicht alle der Einfachheit halber hier vorstellen wollte. Ich kann nicht die Namen aller Spalten setzen, wenn ich die CSV-Datei lesen möchte – HimanAB

+0

Ich nehme an, dass Sie bereits Ihre Daten geladen haben; Wenn Sie "df" durch "Darlehen" ersetzen, sollten die letzten drei Anweisungen tun, was Sie wollen. –

+0

Die Art, wie ich es lade ist es durch pd.read_csv(), so dass es keine Feld-ID gibt. deshalb paid_ids = df [df.status == 'bezahlt'] ID.drop_duplicates() wirft gibt mir Fehler – HimanAB