【发布时间】:2021-06-15 11:48:09
【问题描述】:
我想找到数据框中常量值的最长持续时间。例如,给定下面的数据帧,最长持续时间应为 30 分钟(当 value = 2 时)。
import pandas as pd
d = {'date_time': ['2016-01-01 12:00:00', '2016-01-01 12:15:00',
'2016-01-01 12:30:00', '2016-01-01 12:45:00',
'2016-01-01 13:00:00', '2016-01-01 13:15:00',
'2016-01-01 13:30:00', '2016-01-01 13:45:00'],
'value': [1,2,2,2,4,5,5,7]}
df = pd.DataFrame(data=d)
df['date_time'] = pd.to_datetime(df['date_time'])
print(df)
date_time value
0 2016-01-01 12:00:00 1
1 2016-01-01 12:15:00 2
2 2016-01-01 12:30:00 2
3 2016-01-01 12:45:00 2
4 2016-01-01 13:00:00 4
5 2016-01-01 13:15:00 5
6 2016-01-01 13:30:00 5
7 2016-01-01 13:45:00 7
(注意:date_time 间隔并不总是一致的。)
我设法通过查找df.value.diff().abs()==0 的索引找到它,构建了一个复杂的函数来遍历该列表并计算范围。
由于实际的数据帧比这个例子大得多,是否有快捷函数或更快的方法来获得它而无需多次迭代?
谢谢。
编辑:
在我的情况下,相同的值可以出现在其他条纹中。一个更合适的例子是
d = {'date_time': ['2016-01-01 12:00:00', '2016-01-01 12:15:00',
'2016-01-01 12:30:00', '2016-01-01 12:45:00',
'2016-01-01 13:00:00', '2016-01-01 13:15:00',
'2016-01-01 13:30:00', '2016-01-01 13:45:00',
'2016-01-01 14:00:00', '2016-01-01 14:05:00'],
'value': [1,2,2,2,4,5,5,7,5,5]}
df = pd.DataFrame(data=d)
df['date_time'] = pd.to_datetime(df['date_time'])
print(df)
date_time value
0 2016-01-01 12:00:00 1
1 2016-01-01 12:15:00 2
2 2016-01-01 12:30:00 2
3 2016-01-01 12:45:00 2
4 2016-01-01 13:00:00 4
5 2016-01-01 13:15:00 5
6 2016-01-01 13:30:00 5
7 2016-01-01 13:45:00 7
8 2016-01-01 14:00:00 5
9 2016-01-01 14:05:00 5
在本例中,当 value = 2 时,最长持续时间仍为 30 分钟。
【问题讨论】:
-
value能否再次连续出现? -
@KarlThornton 相同的值可能会再次出现在另一个连续中,这已经是不同的连续。
标签: python pandas dataframe datetime