首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pandas groupby使用选择行中的时间窗口

Pandas groupby使用选择行中的时间窗口
EN

Stack Overflow用户
提问于 2020-04-29 19:00:10
回答 1查看 48关注 0票数 1

我有一些时间序列数据,其中类型为'RX‘或'CRC’的行的it不幸发生了换行--为了简单起见,在本例中,它是在达到'1‘之后换行的。这意味着我最终得到了多个0和1 ids,而它们应该与0- 4中的类型'TX‘匹配。‘'TX’总是正确的。

我想要做的是根据来自每个TX行的10ms时间窗口进行分组,并根据TX行中的id值来固定id列。也就是说..。

发自:

代码语言:javascript
复制
                       time type  id
 0  2020-01-01 10:33:00.000   TX   0
 1  2020-01-01 10:34:00.500   TX   1
 2  2020-01-01 10:34:00.000   TX   2
 3  2020-01-01 10:34:00.007  CRC   2
 4  2020-01-01 10:34:00.009   RX   2
 5  2020-01-01 10:34:00.027   RX   2
 6  2020-01-01 10:34:00.047   RX   2
 7  2020-01-01 10:34:00.012   TX   3
 8  2020-01-01 10:34:00.013   RX   3
 9  2020-01-01 10:34:00.038   RX   3
 10 2020-01-01 10:34:00.026   TX   4
 11 2020-01-01 10:34:00.036   TX   5
 12 2020-01-01 10:34:00.041   TX   6

至:

代码语言:javascript
复制
                  time type  id
 0  2020-01-01 10:33:00.000   TX   0
 1  2020-01-01 10:34:00.500   TX   1
 2  2020-01-01 10:34:00.000   TX   2
 3  2020-01-01 10:34:00.007  CRC   2
 4  2020-01-01 10:34:00.009   RX   2
 5  2020-01-01 10:34:00.012   TX   3
 6  2020-01-01 10:34:00.013   RX   3
 7  2020-01-01 10:34:00.026   TX   4
 8  2020-01-01 10:34:00.027   RX   4
 9  2020-01-01 10:34:00.036   TX   5
 10 2020-01-01 10:34:00.038   RX   5
 11 2020-01-01 10:34:00.041   TX   6
 12 2020-01-01 10:34:00.047   RX   6

MWE:

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-29 19:46:37

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

代码语言:javascript
复制
df1 = df1.sort_values('time')
df1['id'] = (df1['type'] == 'TX').cumsum() - 1

输出:

代码语言:javascript
复制
                      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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61500228

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档