【发布时间】:2018-12-25 19:31:41
【问题描述】:
我想在pandasdf 中订购timestamps。时间从08:00:00 am 左右开始,到3:00:00 am 左右结束。我想在午夜之后的时间中添加 24 小时。所以有时阅读08:00:00 到27:00:00 am。问题是时间没有顺序。
例子:
import pandas as pd
d = ({
'time' : ['08:00:00 am','12:00:00 pm','16:00:00 pm','20:00:00 pm','2:00:00 am','13:00:00 pm','3:00:00 am'],
})
df = pd.DataFrame(data=d)
如果我尝试通过以下方式订购时间
df = pd.DataFrame(data=d)
df['time'] = pd.to_timedelta(df['time'])
df = df.sort_values(by='time',ascending=True)
输出:
time
4 02:00:00
6 03:00:00
0 08:00:00
1 12:00:00
5 13:00:00
2 16:00:00
3 20:00:00
而我希望输出是:
time
0 08:00:00
1 12:00:00
2 13:00:00
3 16:00:00
4 20:00:00
5 26:00:00
6 27:00:00
我不确定这是否可以做到。具体来说,如果我能区分8:00:00 am 和午夜之后的时间(1am-3am)。
【问题讨论】:
-
一种简单的方法是将
date部分(使用日期时间)添加到时间值,并使时间值“大于”与第二天关联的“24:00:00”。哪个日期似乎与您的情况无关。 -
谢谢@nanoix9,布拉德·所罗门。时间永远不会超过凌晨 3 点至凌晨 4 点。我能不能把它应用到那些时间里的任何东西上。因此,消除了上午 8 点到 12 点的时间。
-
@nanoix9。从技术上讲,我会将数据集中的所有内容视为“一个日期”。尽管它跨越了两个。但我可以轻松替换它。
-
@PeterJames123 如果时间永远不会超过凌晨 4 点,我会有一个更好的主意。为什么不把所有时间都减去 4 小时?(但记得在凌晨 3 点至凌晨 4 点之间的时间先加上 24 小时)。这样一来,所有时间都将在 0 ~ 24 的范围内,也称为“一个日期”。您可以轻松地将它们添加回来。
-
我正在将时间戳与另一个数据集对齐,因此它们必须是 0-27
标签: python pandas time timedelta