2017-05-30 6 views
0

Ich habe einen Datensatz wie folgt, der die Attribute des Spielers für jedes Spiel enthält. Der Datensatz ist im Pandas Dataframe-Format und nach Datum für jede characterId in absteigender Reihenfolge sortiert.Wie legen Sie die Werte einer neuen Spalte im Datenframe basierend auf der anderen Spalte und einem Schlüssel fest?

characterId date    kills deaths matchResult 
200   3-5-2014-22:30:10 10  12  0 
300   4-4-2014-23:30:10 10  13  1 
400   1-2-2014-17:30:10 9  10  1 
201   3-5-2014-22:20:05 11  16  0 
301   1-4-2014-20:20:05 18  15  1 

Ich möchte eine neue Spalte (nextResult) hinzuzufügen, der den Wert von matchResult des letzten Spiels enthält. Der neue Datenrahmen soll wie folgt aussehen:

characterId date    kills deaths matchResult nextResult 
200   3-5-2014-22:30:10 10  12  0    nan 
300   4-4-2014-23:30:10 10  13  1    0 
400   1-2-2014-17:30:10 9  10  1    1 
201   3-5-2014-22:20:05 11  16  0    nan 
301   1-4-2014-20:20:05 18  15  1    0  

Antwort

0

Sie shift und where verwenden können, um zu überprüfen, um zu sehen, ob die characterId neu gestartet werden.

df['nextResult'] = df.shift(1)['matchResult'].where(df.characterid.diff().fillna(0).ge(0)) 

Ausgang:

characterid    date kills deaths matchResult nextResult 
0   200 3-5-2014-22:30:10  10  12   0   NaN 
1   300 4-4-2014-23:30:10  10  13   1   0.0 
2   400 1-2-2014-17:30:10  9  10   1   1.0 
3   201 3-5-2014-22:20:05  11  16   0   NaN 
4   301 1-4-2014-20:20:05  18  15   1   0.0 

df['nextResult'] = df.shift(1)['matchResult'].where(df.characterid.gt(df.shift(1).fillna('').characterid.astype(str))) 
+0

Vielen Dank für Ihre Lösung. Ich habe es versucht, aber es zeigt den folgenden Fehler: 'features.shift (1) ['matchResult']. Wo (features.characterId.diff(). Fillna (0) .ge (0)) Datei" C: \ ProgramData \ Anaconda2 \ lib \ site-packages \ pandas \ core \ series.py ", Zeile 1459, in diff Ergebnis = algos.diff (_values_from_object (self), Punkte) Datei" C: \ ProgramData \ Anaconda2 \ lib \ site-packages \ pandas \ core \ algorithm.py ", Zeile 1251, in diff out_arr [res_indexer] = arr [res_indexer] - arr [lag_indexer] TypeError: nicht unterstützte Operandentyp (en) für -: 'str 'und' str'' – YNr

+0

Sind Sie CharacterId immer ganze Zahlen oder könnten da einige Buchstaben drin sein? –

+0

Die 'characterId' ist eine Zeichenkette. – YNr

0

einfach den Datenrahmen zugreifen, als ob es ein Wörterbuch waren:

import numpy as np # for np.NaN (or use NaN = float('nan')) 
df = pd.DataFrame({ ... }) # your dataframe possibly from a CSV 
df['nextResult'] = [np.NaN, 0, 1, np.NaN, 0] 

Für ein Intro zu Pandas https://pandas.pydata.org/pandas-docs/stable/10min.html

sehen
+0

Scott hatte offensichtlich mehr Informationen darüber, wie man 'nextResult' erstellt. – taliesin

Verwandte Themen