熊猫在时间戳记上增加增量以打破平局,保持原始顺序

时间:2019-04-25 08:57:07

标签: pandas timedelta

我有一个格式为

的数据框
   df = pandas.DataFrame([{'tstamp':'2019-03-06 06:42:13.582500', 'value' : 1},
    {'tstamp':'2019-03-06 06:43:28.937400', 'value':   2},
    {'tstamp':'2019-03-06 06:43:28.937400', 'value' :   -1},
    {'tstamp':'2019-03-06 06:43:28.937400', 'value' :   2},
    {'tstamp':'2019-03-06 06:43:28.937400', 'value' :   -4},
    {'tstamp':'2019-03-06 06:43:37.237500', 'value' :    1},
    {'tstamp':'2019-03-06 06:43:37.237500', 'value' :    1},
    {'tstamp':'2019-03-06 06:43:37.237500', 'value' :    1},
    {'tstamp':'2019-03-06 06:47:25.470300', 'value' :    3},
    {'tstamp':'2019-03-06 06:47:54.791500', 'value' :    4},
    {'tstamp':'2019-03-06 06:49:11.971600', 'value' :   5},
    {'tstamp':'2019-03-06 06:49:11.971600', 'value' :    2},
    {'tstamp':'2019-03-06 06:49:33.285500', 'value' :    1},
    {'tstamp':'2019-03-06 06:49:42.414700', 'value' :   10},
    {'tstamp':'2019-03-06 06:49:55.300300', 'value' :   11},
    {'tstamp':'2019-03-06 06:49:55.300300', 'value' :    9},
    {'tstamp':'2019-03-06 06:52:03.992600', 'value' :   -1},
    {'tstamp':'2019-03-06 06:52:03.992600', 'value' :    2}])

其中一些索引时间戳与它们有联系。

我的问题是:如何有效地用领带将有效的时间增量添加到行的索引中,以打破索引中的关系,同时又保留数据的顺序?

@jezrael:

我需要创建一个新的'tstamp'列,我们将其称为'tstamp2',它满足以下条件:

  • (df.sort_values('tstamp2').index == df.sort_values('tstamp').index).all()为真,
  • df.tstamp2.duplicated().any()为假,
  • (df[~df.tstamp.duplicated()].tstamp == df[~df.tstamp.duplicated()].tstamp2).all()为真,

1 个答案:

答案 0 :(得分:1)

如果可以将'tstamp'转换为np.datetime格式,那么应该可以:

df['tstamp2'] = pandas.to_datetime(df.tstamp)
df['tstamp2'] += pandas.to_timedelta(df.groupby(df.tstamp2).cumcount(), unit='ns')
# Condition 1:
# Out: True
# Condition 2:
# Out: False
# Condition 3:
# Out: True

假设“正好足够的时间增量”是一个纳秒(unit='ns')。

如果您想将'tstamp'保留为字符串,则可以这样完成任务:

df['tstamp2'] = df.tstamp + df.groupby(df.tstamp).cumcount().astype(str)
# Condition 1:
# Out: True
# Condition 2:
# Out: False
# Condition 3:
# Out: True

这两种方法都满足所有三个条件。

相关问题