У меня есть данные панели, я бы хотел сбросить первые (несколько) строки, содержащие NaN в каждой группе. (Или какой-нибудь общий метод, который может упасть на основе индекса в группе и других условий.)Pandas drop первые несколько строк содержат nan в каждой группе
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))
Эти данные будут выглядеть следующим образом:
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
Я хотел бы отказаться от линии 1 и 7, но не строка 9, так как линия 9 не одна из первых недостающих наблюдений, я попытался
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])
но она была удалена строка 1, 7 и 9, по-видимому, ряд 9 не первое наблюдение в группе 3,
Если я это
df[df.groupby('ID', as_index=False)['PRICE'].nth(0).notnull()]
Тогда индекс, созданный объект GroupBy не совпадает с оригинальным dataframe
Может кто-нибудь помочь мне с этим? Спасибо
Что такое правило, которое определяет которые NaN должны держать и капли? – piRSquared