我有2列中缺少值的数据集,我想用上一个上一个日期的前几行中的值来填充它。
因此,有Weight
和Height
应当根据预定义的Category
的最后日期并参考WorkerID
(在先前填充的行),例如:
数据示例:
Ind Date WorkerID Category Weight Height Kind_eat
1 31/12/17 E145-46 cat 2.35 0.6 1
2 01/09/18 M147-50 cat 4.78 0.8 2
3 27/05/18 K178-56 dog 7.03 0.75 3
4 09/02/18 T106-20 mouse NaN NaN 1
5 18/03/19 M147-50 cat NaN NaN 2
6 25/03/19 K178-56 dog NaN NaN 3
7 04/01/17 T106-20 mouse 0.75 0.15 4
8 01/04/19 T156-10 dog 6.99 0.13 4
因此,NaN
和Weight
列中的Height
应当基于与非Weight
相关的Height
,NaN
列来填充最后一个可用日期的值,该日期早于Date
中的实际值。
例如
5 18/03/19 M147-50 cat NaN NaN 2
应由Weight
中的Height
和line2
填充:
5 18/03/19 M147-50 cat 4.78 0.8 2
我尝试通过group-by
的{{1}}和fillna
方法来做到这一点,但是它什么也没填。
group
我也尝试使用:
df.groupby(['Date','WorkerID'], as_index = False).apply(lambda group: group.ffill())
实际结果是:-没有正确填写NaN
df.groupby(['Date','WorkedID']).ffill().reindex(df.columns, axis=1)
预期结果应该是:
Ind Date WorkerID Category Weight Height Kind_eat
1 31/12/17 E145-46 cat 2.35 0.6 1
2 01/09/18 M147-50 cat 4.78 0.8 2
3 27/05/18 K178-56 dog 7.03 0.75 3
4 09/02/18 T106-20 mouse NaN NaN 1
5 18/03/19 M147-50 cat NaN NaN 2
6 25/03/19 K178-56 dog NaN NaN 3
7 04/01/17 T106-20 mouse 0.75 0.15 4
8 01/04/19 T156-10 dog 6.99 0.13 4
任何想法,我将不胜感激。谢谢)
答案 0 :(得分:1)
我认为您必须先将Date
转换为datetime
。
df['Date'] = pd.to_datetime(df['Date'])
然后将sort_values
的{{1}}和Date
然后groupby
的{{1}}使用。
['WorkerID', 'Category']