python - 将 pandas 移动窗口与列表进行比较,以找到错误最少的窗口
问题描述
我已将我的数据集减少到最后几个步骤。我的熊猫数据框看起来像这样
FAC
0 1
1 2
2 1
3 3
4 2
5 1
6 2
7 1
8 1
9 3
10 2
11 1
12 2
13 3
14 1
我也有一个我已经确定要匹配的列表。
match_list = [1, 2, 1, 1, 3]
我正在寻找的是滑过(5 项窗口)数据框列并找到与列表模式匹配的行。最终的结果是这样的。我会感谢任何帮助。
FAC Error
0 1 some val
1 2 some val
2 1 some val
3 3 some val
4 2 some val
5 1 some val
6 2 some val
7 1 0
8 1 some val
9 3 some val
10 2 some val
11 1 some val
12 2 some val
13 3 some val
14 1 some val
解决方案
这可以通过以下方式完成rolling
:
match_list = [1, 2, 1, 1, 3]
match_list = np.array(match_list)
def match(x):
return (len(x)==len(match_list) and (x==match_list).all())
df['error'] = np.where(df.FAC.rolling(5, center=True).apply(match)==1, 0, 'some value')
输出:
FAC error
0 1 some value
1 2 some value
2 1 some value
3 3 some value
4 2 some value
5 1 some value
6 2 some value
7 1 0
8 1 some value
9 3 some value
10 2 some value
11 1 some value
12 2 some value
13 3 some value
14 1 some value
更新:要计算匹配,你可以简单地做mean
而不是all
在函数内部:
def count_match(x):
return (len(x)==len(match_list))* (x==match_list).mean()
df['error'] = df.FAC.rolling(5,center=True).apply(count_match)
输出:
FAC error
0 1 NaN
1 2 NaN
2 1 0.6
3 3 0.0
4 2 0.4
5 1 0.4
6 2 0.2
7 1 1.0
8 1 0.2
9 3 0.2
10 2 0.4
11 1 0.6
12 2 0.0
13 3 NaN
14 1 NaN
推荐阅读
- python - 刮掉没有类名的 Span 标签,并且不会出现在所有元素中
- java - 在二维数组中选择最小 ID 时删除重复行
- python - 当 pysftp 连接失败时,“'Connection' 对象没有属性 '_sftp_live'”
- sql - postgres 是否允许在多列索引中使用空值?
- sql-server - 在 sqlmock 中测试 MSSQL 表值参数
- php - PHP 处理向 HTML 元素添加类
- java - 在 Maven 依赖项中使用时,Mockit 初始化失败
- aes-gcm - AES 256 GCM 与 php 5.6
- kubernetes - 错误:没有来自任何对等方的有效响应。错误:peer=undefined,status=grpc,message=Endorsement has failed
- python - Python:你能在 Python 的 IF 语句中打开和编辑 csv 文件吗?