【问题标题】:Distribute Time over milliseconds for a smooth curve以毫秒为单位分配时间以获得平滑曲线
【发布时间】:2019-05-29 16:28:19
【问题描述】:

我有一个数据框,其中一列包含日期时间。日期时间是直到秒。我需要自动将毫秒添加到秒,因为每个秒值都有多个值。 例如 - 2019 年 2 月 21 日下午 3:50:41,我有这个时间戳 35 次。如果我可以在这个时间戳上添加毫秒,那么当我绘制曲线时,它将是一个平滑的曲线。并且每个第二个值都有不同数量的实例。

【问题讨论】:

  • 不加毫秒,只关心每一秒所有值的mean会不会很有趣?
  • @Ben.T 我不是指价值,我需要每毫秒的价值。

标签: python pandas dataframe datetime


【解决方案1】:

你可以试试groupby修改日期

df = pd.DataFrame({'date': pd.to_datetime(['Feb 21, 2019 3:50:41 PM']*35 + 
                                          ['Feb 21, 2019 3:50:42 PM']*100),
                        'val': np.linspace(0,1,135)})

def time_shift(s):
    count = len(s)
    deltas = pd.timedelta_range('0ms', '1000ms',
                                periods=count+1, closed='left')
    return s + deltas

df.date = df.groupby(['date']).date.transform(time_shift)

plt.plot(df.date, df.val)

原始数据框图:

按毫秒缩放后的绘图:

移位后的数据框:

df.tail(5)

+-----+-------------------------------+----------+
|     | date                          |      val |
|-----+-------------------------------+----------|
| 130 | 2019-02-21 15:50:42.959595959 | 0.970149 |
| 131 | 2019-02-21 15:50:42.969696969 | 0.977612 |
| 132 | 2019-02-21 15:50:42.979797979 | 0.985075 |
| 133 | 2019-02-21 15:50:42.989898989 | 0.992537 |
| 134 | 2019-02-21 15:50:43           | 1        |
+-----+-------------------------------+----------+

【讨论】:

  • 感谢您的解决方案。我有一个疑问,实际上我所拥有的时间序列是从 2019 年 2 月 21 日下午 3:50:39 到 2019 年 2 月 21 日下午 3:52:35 开始的。我有大约 7000 行。现在,如果通过任何方式,它可以计算相同的时间实例并将其分布在几毫秒内。由于 35 不是恒定的,因此某些时间瞬间会发生 40 次,有时会发生 65 次。
  • 这是一个例子。 time_shift 函数将根据每个秒块进行缩放。
  • 你能帮我在打印时使用这个功能吗 df['Time'] 我得到这个'0 2019 年 2 月 21 日下午 3:50:39 2019 年 2 月 21 日 3:50 2019 年 2 月 21 日下午 39 点 2019 年 2 月 21 日下午 3:50:39 2019 年 2 月 21 日下午 3:50:39 2019 年 2 月 21 日下午 3:50:39'
  • 在我的代码中,时间戳列是date。因此,尝试将所有 .date 更改为 .Time ,并确保 df['Time'] 的类型为 datetime (df['Time'] = pd.to_datetime(df['Time'])。
  • 谢谢,它工作正常只是一件事,当新的一秒到来时,它会以 00 毫秒给出两个相同的值,例如 --> 2019-02-21 15:50:39.909090909 2019-02-21 15:50:40.000000000 2019-02-21 15:50:40.000000000 2019-02-21 15:50:40.016949152
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多