【发布时间】:2019-12-08 12:04:33
【问题描述】:
我正在尝试删除时间戳早于或晚于后续行的行。我不确定我是否想多了,但我目前的尝试如下。
注意:我不想对时间戳进行排序,所以它是有序的。我想完全删除或删除它们。
下面的df只是一个例子。我需要此代码用于不同的输入数据集,其中 unordered 时间戳的数量不同。
df = pd.DataFrame({
'Time' : ['1/1/1900 8:00:00','1/1/1900 9:49:00','1/1/1900 10:00:00','1/1/1900 12:33:00','1/1/1900 12:35:00','1/1/1900 12:24:00','1/1/1900 13:42:00','1/1/1900 13:45:00','1/1/1900 14:21:00','1/1/1900 14:36:00'],
'Number' : [1,2,2,2,1,1,2,2,3,4],
})
df['Time'] = df['Time'].astype('datetime64')
df['diff'] = df['Time'] - df['Time'].shift(-1)
df['diff'] = df['diff'].dt.total_seconds()
df['diff'].fillna(0, inplace=True)
df['diff'] = df['diff'].astype(int)
df = df[df['diff'] < 1]
输出:
Time Number diff
0 1900-01-01 08:00:00 1 -6540
1 1900-01-01 09:49:00 2 -660
2 1900-01-01 10:00:00 2 -9180
3 1900-01-01 12:33:00 2 -120 *Rows below are 12:24:00
5 1900-01-01 12:24:00 1 -4680
6 1900-01-01 13:42:00 2 -180
7 1900-01-01 13:45:00 2 -2160
8 1900-01-01 14:21:00 3 -900
9 1900-01-01 14:36:00 4 0
预期的df:
Time Number diff
0 1900-01-01 08:00:00 1 -6540
1 1900-01-01 09:49:00 2 -660
2 1900-01-01 10:00:00 2 -9180
5 1900-01-01 12:24:00 1 -4680
6 1900-01-01 13:42:00 2 -180
7 1900-01-01 13:45:00 2 -2160
8 1900-01-01 14:21:00 3 -900
9 1900-01-01 14:36:00 4 0
它选择了索引 4,但没有选择索引 3。我不知道我是否应该创建一个交互的脚本,直到没有正数或有更简单的方法。
【问题讨论】:
-
为什么
5 1900-01-01 12:24:00 1 -4680在预期的输出中,你能简单解释一下吗?谢谢 -
在后续行之前?所以它是有序的。
-
@anky_91 他说你应该删除带有“旧”时间戳的行,而不是基于“新”5 1900-01-01 12:24:00 1 -4680 不比任何后续行更旧。
标签: python pandas sorting datetime