2
我有年度數據。這些年份中的每一年都存儲在一個單獨的數據框中。 某些信息在某些年份缺失,但可能在其他年份可用。如果在失蹤的一年之前和之後觀察到信息,我只能相信這些信息。 例如: -如果滯後和潛伏期相同,則替換缺失值
Index Identifier Date Owner
1 A 2005 F
2 A 2006 NaN
3 A 2007 F
4 B 2005 G
5 B 2006 NaN
6 B 2007 NaN
7 B 2008 G
8 B 2009 NaN
9 B 2010 F
10 C 2006 H
11 C 2007 NaN
12 C 2008 NaN
這到底應該是這樣的:
Index Identifier Date Owner
1 A 2005 F
2 A 2006 F
3 A 2007 F
4 B 2005 G
5 B 2006 G
6 B 2007 G
7 B 2008 G
8 B 2009 NaN
9 B 2010 F
10 C 2006 H
11 C 2007 NaN
12 C 2008 NaN
所以,只有當我觀察同一個失蹤一年前後應該有一個變化。如果我以後沒有觀察到任何事情,或者我觀察到不同的事情,我不應該改變。實際數據每年約有1000萬觀測值。所以循環會非常低效。
我目前的解決辦法是:
framestot=(df2005, df2006, df2007, df2008, df2009, df2010)
df=pd.concat(framestot, ignore_index=True)
df=df.sort(columns='date', ascending=True, kind='quicksort')
df['lag'] = df.Owner
df['lead'] = df.Owner
df['lag'] = df.groupby(['Identifier'])['lag'].transform(lambda grp: grp.fillna(method='ffill'))
df['lead'] = df.groupby(['Identifier'])['lead'].transform(lambda grp: grp.fillna(method='bfill'))
df.loc[df['Owner'].isnull() & df['lead'] == df['lag'],'Owner'] = df.lag
這似乎是一個非常低效的解決它的方法。有沒有辦法直接調用這些信息? 如果我沒有弄錯,這也需要什麼是第一個非缺失的滯後和領先。我可以限制嗎?例如,如果我只想在最近兩年和未來兩年更換它們,它們是相同的。如果數據來自兩年多前,我保留缺失的值。
有一個'limit' 'fillna'的參數,所以如果你想限制填充方法,你可以通過'limit = 2' – EdChum
謝謝,這絕對解決了第二個問題 – Peter