Python 使用“选择行”中的“时间窗口”进行分组

Python 使用“选择行”中的“时间窗口”进行分组,python,pandas,time-series,pandas-groupby,Python,Pandas,Time Series,Pandas Groupby,我有一些timeseries数据,其中类型为“RX”或“CRC”的行的ID不幸被环绕-为了简单起见,在本例中,它在到达“1”后被环绕。这意味着当0和1应该与0-4中的类型“TX”匹配时,我会得到多个0和1 ID“TX”总是正确的 我要做的是从每个TX行按10ms时间窗口分组,并根据TX行中的id值修复id列。i、 e 发件人: 致: MWE: 这看起来可以解决您的问题: df1 = df1.sort_values('time') df1['id'] = (df1['type'] == 'TX')

我有一些timeseries数据,其中类型为“RX”或“CRC”的行的ID不幸被环绕-为了简单起见,在本例中,它在到达“1”后被环绕。这意味着当0和1应该与0-4中的类型“TX”匹配时,我会得到多个0和1 ID“TX”总是正确的

我要做的是从每个TX行按10ms时间窗口分组,并根据TX行中的id值修复id列。i、 e

发件人:

致:

MWE:


这看起来可以解决您的问题:

df1 = df1.sort_values('time')
df1['id'] = (df1['type'] == 'TX').cumsum() - 1
输出:

                      time type  id
0  2020-01-01 10:34:00.000   TX   0
1  2020-01-01 10:34:00.007  CRC   0
2  2020-01-01 10:34:00.009   RX   0
5  2020-01-01 10:34:00.012   TX   1
6  2020-01-01 10:34:00.013   RX   1
8  2020-01-01 10:34:00.026   TX   2
3  2020-01-01 10:34:00.027   RX   2
9  2020-01-01 10:34:00.036   TX   3
7  2020-01-01 10:34:00.038   RX   3
10 2020-01-01 10:34:00.041   TX   4
4  2020-01-01 10:34:00.047   RX   4
s1 = pd.to_datetime(['20200101 10:33:00.000',
                     '20200101 10:34:00.500',
                     '20200101 10:34:00.000', '20200101 10:34:00.007', '20200101 10:34:00.009', '20200101 10:34:00.027', '20200101 10:34:00.047',
                     '20200101 10:34:00.012', '20200101 10:34:00.013', '20200101 10:34:00.038',
                     '20200101 10:34:00.026',
                     '20200101 10:34:00.036',
                     '20200101 10:34:00.041'])
d1 = {'time': s1,
      'type': ['TX', 'TX', 'TX', 'CRC', 'RX', 'RX', 'RX', 'TX', 'RX', 'RX', 'TX', 'TX', 'TX'],
      'id': [0, 1, 2, 2, 2, 2, 2, 3, 3, 3, 4, 5, 6]}
df1 = pd.DataFrame(data=d1)
print(df1)

s2 = pd.to_datetime(['20200101 10:33:00.000',
                     '20200101 10:34:00.500',
                     '20200101 10:34:00.000', '20200101 10:34:00.007', '20200101 10:34:00.009',
                     '20200101 10:34:00.012', '20200101 10:34:00.013',
                     '20200101 10:34:00.026', '20200101 10:34:00.027',
                     '20200101 10:34:00.036', '20200101 10:34:00.038',
                     '20200101 10:34:00.041', '20200101 10:34:00.047'])
d2 = {'time': s2,
      'type': ['TX', 'TX', 'TX', 'CRC', 'RX', 'TX', 'RX', 'TX', 'RX', 'TX', 'RX', 'TX', 'RX'],
      'id': [0, 1, 2, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6]}
df2 = pd.DataFrame(data=d2)
print(df2)
df1 = df1.sort_values('time')
df1['id'] = (df1['type'] == 'TX').cumsum() - 1
                      time type  id
0  2020-01-01 10:34:00.000   TX   0
1  2020-01-01 10:34:00.007  CRC   0
2  2020-01-01 10:34:00.009   RX   0
5  2020-01-01 10:34:00.012   TX   1
6  2020-01-01 10:34:00.013   RX   1
8  2020-01-01 10:34:00.026   TX   2
3  2020-01-01 10:34:00.027   RX   2
9  2020-01-01 10:34:00.036   TX   3
7  2020-01-01 10:34:00.038   RX   3
10 2020-01-01 10:34:00.041   TX   4
4  2020-01-01 10:34:00.047   RX   4