我有一个如下数据框:
Timestamp Value
11/23/2017 7
11/24/2017 3
11/25/2017 5
11/26/2017 7
11/27/2017 7
11/28/2017 7
我想写一些东西,它返回最后一个值的第一个实例,7,向上看,并在值变为其他值时停止。因此,示例数据框的答案应为11/26/2017
。
我尝试drop_duplicates
但是返回时间戳为11/23/2017
的第一行。
感谢。
答案 0 :(得分:2)
In [173]: df.iat[df.loc[::-1, 'Value'].diff().fillna(0).ne(0).idxmax()+1,
df.columns.get_loc('Timestamp')]
Out[173]: '11/26/2017'
计时 600.000行DF:
In [201]: df = pd.concat([df] * 10**5, ignore_index=True)
In [202]: %%timeit
...: df['Value'].ne(df['Value'].shift()).cumsum().idxmax()
...:
15.3 ms ± 646 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
In [203]: %%timeit
...: df.iat[df.loc[::-1, 'Value'].diff().fillna(0).ne(0).idxmax()+1,
...: df.columns.get_loc('Timestamp')]
...:
11.6 ms ± 237 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)