我有一個面板數據,我想放下每個組中包含NaN的第一行(幾行)。 (或者,其可能下降基於組和其它條件中的索引一些一般方法。)大熊貓頭幾行包含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對象創建的索引不會與原來的數據框對齊
任何人可以幫助我?謝謝
是什麼定義規則NaN的保留和下降? – piRSquared