【发布时间】:2019-10-28 12:11:37
【问题描述】:
我有以下数据结构:
|a |b |start_time |end_time
0 |aaba |d |11:26 | 11:27
1 |aba |c |11:27 | 11:32
2 |aba |c |11:32 | 11:34
3 |cab |ab |11:34 | 11:35
4 |aba |c |11:35 | 11:40
我想合并列a 和b 上重复的连续行,然后我想将新行的start_time 和end_time 更新为两者中的较早者和后面的分别是两个。
由于条目是连续的,这意味着保留第一个的start_time 和第二个的end_time。通常有两个一个接一个的重复。
所以在上述情况下,我想合并行 1 和 2 并最终得到:
|a |b |start_time |end_time
0 |aaba |d |11:26 | 11:27
1 |aba |c |11:27 | 11:34
2 |cab |ab |11:34 | 11:35
3 |aba |c |11:35 | 11:40
我尝试使用loc 并在第一次运行时更新end_time 列,然后在第二次删除重复项,但运行两次loc 似乎很浪费:
df.loc[(df['a']+df['b']) == (df['a']+df['b']).shift(-1), 'end_time'] = df['end_time'].shift(-1)
df = df.loc[(df['a']+df['b']) != (df['a']+df['b']).shift(-1)]
有没有办法删除重复项并仅通过一次迭代更新 end_time 值?
【问题讨论】: