【发布时间】:2020-11-14 15:29:06
【问题描述】:
我有几年的广泛数据框架:
df = pd.DataFrame(index=pd.Index([29925, 223725, 280165, 813285, 956765], name='ID'),
columns=pd.Index([1991, 1992, 1993, 1994, 1995, 1996, '2010-2012'], name='Year'),
data = np.array([[np.NaN, np.NaN, 16, 17, 18, 19, np.NaN],
[16, 17, 18, 19, 20, 21, np.NaN],
[np.NaN, np.NaN, np.NaN, np.NaN, 16, 17, 31],
[np.NaN, 22, 23, 24, np.NaN, 26, np.NaN],
[36, 36, 37, 38, 39, 40, 55]]))
Year 1991 1992 1993 1994 1995 1996 2010-2012
ID
29925 NaN NaN 16.0 17.0 18.0 19.0 NaN
223725 16.0 17.0 18.0 19.0 20.0 21.0 NaN
280165 NaN NaN NaN NaN 16.0 17.0 31.0
813285 NaN 22.0 23.0 24.0 NaN 26.0 NaN
956765 36.0 36.0 37.0 38.0 39.0 40.0 55.0
每一行中的值是每个人的年龄,每个人都有一个唯一的 ID。我想根据每行中现有的年龄值,在每一行的每一年中填充此数据框的NaN。
例如,ID 29925 在 1993 中是 16,我们知道它们在 1992 中是 15,在 1991 中是 14,因此我们想将 NaN 替换为 @ 列中的 29925 987654329@ 和1991。同样,我想根据29925 的现有年龄值替换2010-2012 列中的NaN。假设29925 比2010-2012 列中的1996 大15 岁。对整个数据框(即所有 ID)执行此操作的最快方法是什么?
【问题讨论】:
-
最后一行前 36 是 35,是吗?不应该有两个 36...
-
是的,你能明确地解释一下最后一行吗?如果您的数据有可能是混乱的,以至于年龄并不总是每年增加 1 岁(或者从 1996-2010-2012 年仅增加 14 岁而不是 15 岁),您想如何解决这种情况?在那种情况下,我可以想象你可能会有像
35 NaN 36这样的空白,并且不可能知道NaN应该变成 35 还是 36... -
嗨,谢谢你们的回复,我们可以说最后一行应该是 35 还是 36 是未知的。数据来自假设调查,该人可能已经 36 次回复1991 年和 1992 年的调查,例如他们在 1991 年 12 月和 1992 年 1 月再次做出回应,他们的生日是 6 月。对于其他
NaNs的情况,按照年份+1或-1的一般规则填写。
标签: python pandas dataframe nan