Ich habe eine Panel-Daten, würde ich gerne die ersten (ein paar) Zeile (n), die NaN in jeder Gruppe enthalten. (Oder ein allgemeines Verfahren, das auf dem Index innerhalb der Gruppe und anderen Bedingungen reduzieren kann.)Pandas Tropfen die ersten paar Zeilen enthalten Nan in jeder Gruppe
df = pd.DataFrame(
{'ID': [10001, 10001, 10001, 10002, 10002, 10002, 10003, 10003, 10003, 10003],
'PRICE': [None, 11.5, 14.31, 15.125, 14.44, None, None, None, None, 23.55],
'date': [19920103, 19920106, 19920107, 19920108, 19920109, 19920110,
19920113, 19920114, 19920115, 19920116]},
index = range(1,11))
Die Daten würden wie folgt aussehen:
ID PRICE date
1 10001 NaN 19920103
2 10001 11.500 19920106
3 10001 14.310 19920107
4 10002 15.125 19920108
5 10002 14.440 19920109
6 10002 NaN 19920110
7 10003 NaN 19920113
8 10003 NaN 19920114
9 10003 NaN 19920115
10 10003 23.550 19920116
Ich mag würde Linie fallen 1 und 7, aber nicht 9 Linie, da die Leitung 9 nicht einer der ersten wenigen fehlenden Beobachtungen ist, habe ich versucht,
def mask_first_missing(x):
result = x.notnull() & x.rank()==1
return result
mask = df.groupby(['ID'])['PRICE'].transform(mask_first_missing).astype(bool)
print(df[mask])
aber es entfernt Reihe 1, 7 und 9, Reihe scheinbar 9 ist nicht die erste Beobachtung in der Gruppe 3,
Wenn ich dies tue
df[df.groupby('ID', as_index=False)['PRICE'].nth(0).notnull()]
Dann wird der Index von groupby Objekt erstellt wird, nicht mit dem ursprünglichen Datenrahmen ausgerichtet
Könnte jemand mir dabei helfen? Danke
Was ist die Regel, die definiert, welche NaN soll man behalten und fallen lassen? – piRSquared