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