python - 找到相等的时间并逐渐添加一个常数

标签 python pandas datetime group-by running-count

我有一个包含一些时间戳的数据框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/

相关文章:

python - 以特定格式创建并导出 3 列列表

Python 3.x - 使用代表整数的符号创建垂直列表

python - 如何在 for 循环中创建多个复选框?

python - 根据不同长度的分隔符拆分 Pandas 字符串列

ruby-on-rails - 如何在Rails应用程序中存储年份

python - 将 pandas.Series 中的时间戳转换为 datetime.datetime

python - flask 路线 : pattern matching to exclude certain routes

python - 更改数据框中多个位置的最快方法

python - 如何使用 pandas 列和字典有效地构建特征?

php - MySQL "less than"无法正常工作