将两列合并为上下填充的单列

时间:2019-03-15 20:23:54

标签: python python-3.x pandas

我有一个数据框,用于跟踪对象在人与人之间的运动。每行包含此对象状态的更新,并按时间戳升序排列。

我有两列代表从一个所有者到另一个所有者的状态更改。我想将这些列折叠为一个列,该列代表每个更新行中所有者的“当前状态”。不幸的是,我只能得到状态更改,因此我必须能够上下填充。

这是一个示例数据框:

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

谢谢!

2 个答案:

答案 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.fillnamethod='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