我有一个数据框,用于跟踪对象在人与人之间的运动。每行包含此对象状态的更新,并按时间戳升序排列。
我有两列代表从一个所有者到另一个所有者的状态更改。我想将这些列折叠为一个列,该列代表每个更新行中所有者的“当前状态”。不幸的是,我只能得到状态更改,因此我必须能够上下填充。
这是一个示例数据框:
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
谢谢!
答案 0 :(得分:0)
这是struct signed_10_bit
{
int val : 10;
};
int some_10_bit_num = 0x3ff;
int extended = signed_10_bit{ some_10_bit_num }.val;
上的.ffill
,还有一些额外的填充以获取前几行。因此,我建议缺少由'new_owner'
表示为NaN
的值,这不是熊猫识别的空值:
''
答案 1 :(得分:0)
将df.fillna
与method='ffill'
一起使用即可获取所需内容:
df = test_df.copy()
df['owner'] = df.new_owner
df.owner = df.owner.replace('', np.nan, regex=True)
df.owner = df.owner.fillna(method='ffill')
df.owner = df.owner.fillna('person1')
print(df)
entry_id original_owner new_owner owner
0 0 person1
1 1 person1
2 2 person1 person2 person2
3 3 person2
4 4 person2
5 5 person2 person3 person3
6 6 person3 person4 person4
7 7 person4
8 8 person4