我有一个包含一些时间戳的数据框df
df['Date'].values
Out[16]:
array(['2015-03-25T14:36:39.199994000', '2015-03-25T14:36:39.199994000',
'2015-03-26T10:05:03.699999000', '2015-04-19T16:01:49.680009000',
'2015-04-19T16:36:10.040007000', '2015-04-19T16:36:10.040007000',
'2015-04-19T16:36:10.040007000'], dtype='datetime64[ns]')
如您所见,第一个和第二个时间戳是相等的,但最后 3 个也是。
我想扫描数据帧,如果有相等的时间戳,则保留第一个并向其他相等的时间递增 5 秒。
新的数据框应该是这样的
df['Date'].values
Out[16]:
array(['2015-03-25T14:36:39.199994000', '2015-03-25T14:36:44.199994000',
'2015-03-26T10:05:03.699999000', '2015-04-19T16:01:49.680009000',
'2015-04-19T16:36:10.040007000', '2015-04-19T16:36:15.040007000',
'2015-04-19T16:36:20.040007000'], dtype='datetime64[ns]')
是否有一种 pythonic 方法可以在不循环的情况下这样做。我想根据时间戳分组,但我不知道如何进行......
最佳答案
使用 groupby cumcount 乘以 timedelta 即
df = pd.DataFrame({'Date':np.array(['2015-03-25T14:36:39.199994000', '2015-03-25T14:36:39.199994000',
'2015-03-26T10:05:03.699999000', '2015-04-19T16:01:49.680009000',
'2015-04-19T16:36:10.040007000', '2015-04-19T16:36:10.040007000',
'2015-04-19T16:36:10.040007000'], dtype='datetime64[ns]')})
df['Date'] + df.groupby(df['Date']).cumcount()*pd.Timedelta('5 seconds')
输出:
0 2015-03-25 14:36:39.199994 1 2015-03-25 14:36:44.199994 2 2015-03-26 10:05:03.699999 3 2015-04-19 16:01:49.680009 4 2015-04-19 16:36:10.040007 5 2015-04-19 16:36:15.040007 6 2015-04-19 16:36:20.040007 dtype: datetime64[ns]
关于python - 找到相等的时间并逐渐添加一个常数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47224974/