我有以下df:
date family ID value
2019 abc 10 0.5
15 0.3
xyz 22 0.4
40 1.1
2020 xyz 22 1.9
46 0.3
仅当value
中不存在family
时,我才想向前填充date
。在上面的示例中,ID
和value
会将abc的填充填充到2020,但不将xyz填充到2020。
我尝试过df.unstack(['family','ID']).fillna(method = 'ffill')
,但是在上述示例中,这会错误地转发xyz族的填充ID 40。
所需结果为:
date family ID value
2019 abc 10 0.5
15 0.3
xyz 22 0.4
40 1.1
2020 abc 10 0.5
15 0.3
xyz 22 1.9
46 0.3
答案 0 :(得分:1)
一旦unstack
,您可能需要检查一年中没有该家庭的数据,可以通过groupby.trasnform
和any
来完成。然后使用unstack
数据框ffill
上的where保留仅要填充的值。在fillna
中使用它。然后叠起来
df_u = df.unstack(['family','ID'])
df_ = df_u.fillna(
df_u.ffill()
.where(~df_u.groupby(level='family', axis=1)
.transform('any'))
).stack(['family','ID'])
print (df_)
value
date family ID
2019 abc 10 0.5
15 0.3
xyz 22 0.4
40 1.1
2020 abc 10 0.5
15 0.3
xyz 22 1.9
46 0.3