2017-04-08 3 views
0

Um anzufangen, ein wenig über mein Problem.Kumulative Frequenz für Stringvorkommen

Ich habe einen Datenrahmen der Gewinner der Champions League Cup nach Jahren indiziert.

Beachten Sie, dass die Namen der Team-Teams Zeichenfolgen sind.

year team   need this   year team  wins to date 

1  team1       1  team1   1 
2  team2       2  team2   1 
3  team1       3  team1   2 
4  team3       4  team3   1 

Ich möchte eine neue Spalte mit kumulativen Gewinne erstellen, so dass ich dann ein Liniendiagramm der einzelnen Teams und die Anzahl der plotten können sie den Pokal gewonnen haben. dh ich brauche das Jahr auf der X-Achse und die kumulative Häufigkeit auf dem Y, mit 4 verschiedenen Linien für die Top 4 Teams.

Es gibt wahrscheinlich einen einfachen Weg, die Zählfunktion und eine Schleife zu verwenden, aber ich bin ziemlich neu bei Python und habe kein sehr gutes Verständnis davon. Jede Hilfe würde sehr geschätzt werden!

+0

danke für die Bearbeitung, dass ich versuchte, das selbst zu tun, weiß nicht, wie du es getan hast, aber danke! –

Antwort

1

Blick auf Pandas Dokumentation auf groupby, transform, cumcount und cumsum (http://pandas.pydata.org/pandas-docs/stable/groupby.html). Sie können groupby team und transform verwenden, um ein cumsum on bool Ergebnis zu machen, ob das Team null ist oder nicht.

df 

Input:

year team 
0  1 team1 
1  2 team2 
2  3 team1 
3  4 team3 

Do Transformation

df['wins to date'] = df.groupby('team').transform(lambda x: x.notnull().cumsum()) 
df 

oder als DSM vorschlagen:

df['wins to date'] = df.groupby('team').cumcount()+1 

Ausgang

year team wins to date 
0  1 team1    1 
1  2 team2    1 
2  3 team1    2 
3  4 team3    1 
+2

Vielleicht nur '.Cumcount() + 1'? – DSM

+0

@Dsm Ja. Vielen Dank. –

+0

Hervorragend, dass gearbeitet hat danke! –

0

Ich denke, Sie möchten nur groupby mit Series.cumsum verwenden. Wie in:

df.groupby('team').cumsum() 
+0

Wie würde ich dies auf String-Werte des Teams anwenden? Die Cumsum-Funktion fügt nur die Zeichenfolgen zusammen (team1team1team1, anstatt nur Ziffer 3). Ich möchte die Nummer zählen. Gibt es eine Möglichkeit, dies zu tun? –

+0

aber df ['gewinnt bis heute'] sind ganze Zahlen, nein? Ist das nicht die Spalte, die Sie kumulativ summieren möchten? – splinter

+0

oh sorry 'Gewinne bis heute' ist eine Spalten-ID wie erstellen, es hat keine Ziffern drin, ID wie es mit der Anzahl der Zeiten zu füllen 'Team1' gewonnen, bis zu Thjat Zeile –