python - Python - 应用函数以填充 Group by 组中的 N/A
问题描述
我有 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
ofWeight
和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
andfillna
方法来做到这一点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
。
df['Date'] = pd.to_datetime(df['Date'])
并使用sort_values
byDate
和groupby
then 。['WorkerID', 'Category']
ffill
df = df.sort_values('Date').groupby(['WorkerID', 'Category']).ffill().sort_index()
df
WorkerID Category Date Weight Height Kind_eat
Ind
1 E145-46 cat 2017-12-31 2.35 0.60 1
2 M147-50 cat 2018-01-09 4.78 0.80 2
3 K178-56 dog 2018-05-27 7.03 0.75 3
4 T106-20 mouse 2018-09-02 0.75 0.15 1
5 M147-50 cat 2019-03-18 4.78 0.80 2
6 K178-56 dog 2019-03-25 7.03 0.75 3
7 T106-20 mouse 2017-04-01 0.75 0.15 4
8 T156-10 dog 2019-01-04 6.99 0.13 4
推荐阅读
- delphi - 如何安装 Delphi 10.4 Sydney 命令行编译器(在 Windows Server 2016 上)?
- multithreading - Flask同时为不同的网站访问者分配不同的ID,并将他们的输入信息写入json文件
- python - SymPy 中的非笛卡尔坐标积分
- java - 可选和 Java Spring 测试
- jquery - 当某些数字以k结尾时如何使用Jquery进行排序?
- bash - 比 shell 脚本更有效的 Bash 变量
- python - 合并或映射具有唯一列名或特定条件的 DataFrame
- perl - 将字符串拆分为哈希散列(perl)
- mysql - 无法从 Xampp 上的 phpMyadmin 导出数据库
- pyinstaller - 嘿,我无法正确安装 pyinstaller