2017-01-24 3 views
0

Ich versuche, folgende Logik in Pandas zu kodieren, für die ersten drei Zeilen jeder Gruppe möchte ich eine Variable erstellen, die den Wert 1 (1. Zeile), 2 (2. Zeile) haben sollte), 3 (3. Reihe). Ich mache es wie unten, Im unten stehenden Code erstelle ich keine neue Variable, weil ich nicht weiß, wie das geht, also ersetze ich die Variable, die bereits im Datensatz vorhanden ist. Obwohl mein Code keinen Fehler liefert, gibt er mir sehr seltsame Ergebnisse.Werte den ersten drei Zeilen jeder Gruppe zuweisen

def func (i): 
    data.loc[data.groupby('ID').nth(i).index,'date'] = i 
func(1) 

Irgendwelche Vorschläge? Vielen Dank im Voraus.

Antwort

1

Wenn Sie keinen Index kopiert haben, können Sie eine Reihe ID für jede Gruppe erstellen, herauszufiltern ID, die größer als 3 ist, und es dann zu dem Datenrahmen zuweisen zurück:

data['date'] = (data.groupby('ID').cumcount() + 1)[lambda x: x <= 3] 

Dies gibt Die ersten drei Zeilen für jede ID 1,2,3, Zeilen über 3 werden NaN Werte haben.


data = pd.DataFrame({"ID":[1,1,1,1,2,2,3,3,3]}) 
data['date'] = (data.groupby('ID').cumcount() + 1)[lambda x: x <= 3] 
data 

enter image description here

Verwandte Themen