MI *_* MA 6 python missing-data dataframe pandas
我有一个包含以下列的大型 DataFrame:
import pandas as pd
x = pd.read_csv('age_year.csv')
x.head()
ID Year age
22445 1991
29925 1991
76165 1991
223725 1991 16.0
280165 1991
Run Code Online (Sandbox Code Playgroud)
该Year
列的值范围从1991
到2017
。大多数在 each 中ID
都有一个age
值Year
,例如:
x.loc[x['ID'] == 280165].to_clipboard(index = False)
ID Year age
280165 1991
280165 1992
280165 1993
280165 1994
280165 1995 16.0
280165 1996 17.0
280165 1997 18.0
280165 1998 19.0
280165 1999 20.0
280165 2000 21.0
280165 2001
280165 2002
280165 2003
280165 2004 25.0
280165 2005 26.0
280165 2006 27.0
280165 2007
280165 2008
280165 2010 31.0
280165 2011 32.0
280165 2012 33.0
280165 2013 34.0
280165 2014 35.0
280165 2015 36.0
280165 2016 37.0
280165 2017 38.0
Run Code Online (Sandbox Code Playgroud)
我想根据现有值为age
每个唯一值填充列中的缺失ID
值。例如,对于ID
上面的280165,我们知道它们在29
中2008
,因为它们在31
中2010
(2007 年为28,2003年为 24,依此类推)。
应该如何为每年的age
许多唯一值填充这些缺失值ID
?我不确定如何在整个 DataFrame 中以统一的方式执行此操作。在此问题中用作示例的数据可以在此处找到。
我认为与其尝试填充值,不如查找出生年份。
df["age"] = df["Year"] - (df["Year"]-df["age"]).mean()
Run Code Online (Sandbox Code Playgroud)
或者具有超过 1 个 id 的通用解决方案:
s = df.loc[df["age"].notnull()].groupby("ID").first()
df["age"] = df["Year"]-df["ID"].map(s["Year"]-s["age"])
print (df)
ID Year age
0 280165 1991 12.0
1 280165 1992 13.0
2 280165 1993 14.0
3 280165 1994 15.0
4 280165 1995 16.0
5 280165 1996 17.0
6 280165 1997 18.0
7 280165 1998 19.0
8 280165 1999 20.0
9 280165 2000 21.0
10 280165 2001 22.0
11 280165 2002 23.0
12 280165 2003 24.0
13 280165 2004 25.0
14 280165 2005 26.0
15 280165 2006 27.0
16 280165 2007 28.0
17 280165 2008 29.0
18 280165 2010 31.0
19 280165 2011 32.0
20 280165 2012 33.0
21 280165 2013 34.0
22 280165 2014 35.0
23 280165 2015 36.0
24 280165 2016 37.0
25 280165 2017 38.0
Run Code Online (Sandbox Code Playgroud)