python - 计算超出限制的连续行数
问题描述
我有一个数据框,其中包含每 0.1 秒的名称和速度测量值。我想计算速度在 0.3 秒内超过速度限制的次数(即连续 3 行)。
limit = 25.3
Name speed time
Mary 25.6 0.1
Mary 25.8 0.2
Mary 25.1 0.3
Mary 24.4 0.4
Mary 24.2 0.5
Mary 25.8 0.6
Mary 25.9 0.7
Mary 25.8 0.8
Mary 25.4 0.9
Mary 24.9 1.0
Mary 25.6 1.1
Mary 25.8 1.2
Mary 26.2 1.3
结果
{Mary: 2}
解决方案
第一个想法是通过连续值创建组并聚合每个 grsoups 和 的计数Name
,过滤是否大于或等于 likelimit
并再次按Name
s 计数:
limit = 25.3
m = df['speed'].gt(limit)
s = df.groupby([(~m).shift().bfill()[m].cumsum(),'Name']).size()
s = s[s.ge(3)].groupby(level=1).size()
print (s)
Mary 2
dtype: int64
或者创建连续值的计数器,过滤等于3
和计数Series.value_counts
:
limit = 25.3
m = df['speed'].gt(limit)
#https://stackoverflow.com/a/52718619/2901002
b = m.cumsum()
c = b.sub(b.mask(m).ffill().fillna(0)).astype(int)
df['count'] = c
print (df)
s = df.loc[df['count'].eq(3), 'Name'].value_counts()
print (s)
Mary 2
Name: Name, dtype: int64
推荐阅读
- c++ - QStyledItemDelegate - 创建编辑器后立即显示按钮菜单
- android - 我如何根据请求在改造 2 中显示 MultipartBody.Part[] 的进度?
- ios - 如何滚动滚动视图以使 TextField 在 SwiftUI 中移动到键盘上方?
- android - 下面带有图像和文本的小部件
- excel - 如何将过滤公式中的多个结果填充到表格的每一行中?
- dm-script - 识别图像是 DM 脚本中的 TEM 或 STEM 图像
- c - 我还以为是内存入侵问题,是这样吗?
- angular - 如何在 Ionic 4 应用程序中检查时间同步以防止用户作弊/伪造时间?
- javascript - 如何将数组参数传递给jquery html字符串中的内联onblur
- sql - 根据其他列值减去不同的行值