Python 顺序导线测量中的分组操作

Python 顺序导线测量中的分组操作,python,pandas,Python,Pandas,每次验证某个条件时,通过顺序遍历数据并创建新组来分组数据帧的正确方法是什么 例如: time = [ pd.Timestamp('20130101 09:00:00'), pd.Timestamp('20130101 09:00:02'), pd.Timestamp('20130101 09:00:03'), pd.Timestamp('20130101 09:01:05'), pd.Timestamp('20130101 09:01:06'),

每次验证某个条件时,通过顺序遍历数据并创建新组来分组数据帧的正确方法是什么

例如:

time = [
    pd.Timestamp('20130101 09:00:00'),
    pd.Timestamp('20130101 09:00:02'),
    pd.Timestamp('20130101 09:00:03'),
    pd.Timestamp('20130101 09:01:05'),
    pd.Timestamp('20130101 09:01:06'),
    pd.Timestamp('20130101 09:01:07'),
    pd.Timestamp('20130101 09:01:13'),
    pd.Timestamp('20130101 09:01:15'),
    pd.Timestamp('20130101 09:02:10'),
    pd.Timestamp('20130101 09:03:40'),
    pd.Timestamp('20130101 09:04:15')
]

df = pd.DataFrame({'B': [0, 1, 2, None, 4]}, time)

B
2013-01-01 09:00:00 0.0
2013-01-01 09:00:02 1.0
2013-01-01 09:00:03 2.0
2013-01-01 09:01:05 NaN
2013-01-01 09:01:06 4.0
2013-01-01 09:01:07 5.0
2013-01-01 09:01:13 6.0
2013-01-01 09:01:15 7.0
2013-01-01 09:02:10 8.0
2013-01-01 09:03:40 4.0
2013-01-01 09:04:15 1.0
如何对上述数据进行分组,每次一行的时间戳至少比前一行早一个小时时创建一个新组

期望输出:

G1
20130101 09:00:00
20130101 09:00:02
20130101 09:00:03

G2
20130101 09:01:05
20130101 09:01:06
20130101 09:01:07
20130101 09:01:13
20130101 09:01:15
20130101 09:02:10

G3
20130101 09:03:40
20130101 09:04:15

我可以用命令式的方式来实现这一点,我想知道pandas API是否能够自然地表达这种类型的操作。

我假设您的意思是相隔一分钟而不是一小时,所以这里有一个可能的解决方案。您可以按如下方式计算要分组的变量:

  • 使用
    diff
  • 将这些值与所需的时间增量(1小时或1分钟)进行比较
  • 计算比较结果的累积和。这样,每次出现较大的时间间隔时,该值将增加1
  • 按结果列对数据帧进行分组
下面是一个例子:

# using the time list provided in question
df = pd.DataFrame({'B': list(range(11))}, time) 
g = (df.index.to_series().diff()>pd.to_timedelta('1m')).cumsum()
for i, group in df.groupby(g):
    print(group)

                     B
2013-01-01 09:00:00  0
2013-01-01 09:00:02  1
2013-01-01 09:00:03  2
                     B
2013-01-01 09:01:05  3
2013-01-01 09:01:06  4
2013-01-01 09:01:07  5
2013-01-01 09:01:13  6
2013-01-01 09:01:15  7
2013-01-01 09:02:10  8
                      B
2013-01-01 09:03:40   9
2013-01-01 09:04:15  10

谢谢,这是按条件分组的好方法