python - 将两列合并为上下填充的单列
问题描述
我有一个数据框来跟踪人与人之间物体的移动。每行都包含对此对象状态的更新,并按时间戳升序排序。
我有两列代表从一个所有者到另一个所有者的状态变化。我想将这些列折叠成一列,表示每个更新行中所有者的“当前状态”。不幸的是,我只得到状态变化,所以我必须能够上下填充。
这是一个示例数据框:
test_df = pd.DataFrame([
(0, '', ''),
(1, '', ''),
(2, 'person1', 'person2'),
(3, '', ''),
(4, '', ''),
(5, 'person2', 'person3'),
(6, 'person3', 'person4'),
(7, '', ''),
(8, '', ''),
], columns = ['entry_id', 'original_owner', 'new_owner'])
这就是我希望它看起来的样子:
entry_id original_owner new_owner current_owner
0 person1
1 person1
2 person 1 person 2 person2
3 person2
4 person2
5 person 2 person 3 person3
6 person 3 person 4 person4
7 person4
8 person4
谢谢!
解决方案
这是一个.ffill
on 'new_owner'
,有一些额外的填充来获得前几行。因此,我建议让NaN
as表示的缺失值''
不是 pandas 识别的空值:
import numpy as np
test_df = test_df.replace('', np.NaN)
test_df['current_owner'] = test_df.new_owner.ffill().fillna(test_df.original_owner.bfill())
entry_id original_owner new_owner current_owner
0 0 NaN NaN person1
1 1 NaN NaN person1
2 2 person1 person2 person2
3 3 NaN NaN person2
4 4 NaN NaN person2
5 5 person2 person3 person3
6 6 person3 person4 person4
7 7 NaN NaN person4
8 8 NaN NaN person4
推荐阅读
- karate - 尝试在 Gatling 中运行空手道功能时出现超时异常
- python - 找到几个单词,如果删除一个字母将打印这两个单词
- ruby-on-rails - 如何在法拉第启用日志记录机构
- java - 反应原生 Amplify AWS 包与火力库冲突
- node.js - 从 mongodb 中的数组中提取数据,如果数据超过 10 分钟且临时为真
- sql - 获取薪水第二高的员工姓名
- firebase - 如何通过异步调用 uid 从 Firebase 查询数据
- windows-subsystem-for-linux - 在“Windows 上的 Ubuntu”中调用 sudo chown -R 时避免使用“/mnt/”
- java - 仅在用户输入给出是后才结束循环 - Java
- tensorflow - 通过增加训练数据大小与使用 DataImageGenerator 增强图像(预处理数据)来减少 CNN 中的过拟合