我有两列中缺少值的数据集,我想用上一个日期前几行中的值来填充它。
因此,有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
因此,Weight
和Height
列中的NaN
应该基于Weight
,Height
列来填充,这些列引用的是NaN
上一个可用日期的非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
和fillna
方法为group
完成它,但它没有填充任何内容。你知道吗
df.groupby(['Date','WorkerID'], as_index = False).apply(lambda group: group.ffill())
我还尝试使用:
df.groupby(['Date','WorkedID']).ffill().reindex(df.columns, axis=1)
实际结果是:-NaN没有正确的填充
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
预期结果应为:
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 0.75 0.15 1
5 18/03/19 M147-50 cat 4.78 0.8 2
6 25/03/19 K178-56 dog 7.03 0.75 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
如果你有什么想法,我将不胜感激。(谢谢)
我想你必须先把
Date
转换成datetime
。你知道吗用
sort_values
byDate
和groupby
with['WorkerID', 'Category']
然后ffill
。你知道吗相关问题 更多 >
编程相关推荐