Jak*_*ake 7 python conditional-statements python-3.x
我有一些加速度数据,我试图计算给定一组条件的序列长度。在这种情况下,我想计算一个序列的长度,当加速度moves > 2.78
然后回落到0
.
一个例子是
[-1.1, -1, 0, 1.2, 1.8, 2, 2.88, 2.86, 2.53, 1.98, 1.21, 0.89, 0.11, -0.21]
Run Code Online (Sandbox Code Playgroud)
这里的返回结果将是 7 (2.88, 2.86, 2.53, 1.98, 1.21, 0.89, 0.11)
我以前这样做是为了使用以下代码确定严格> 2.78 的序列长度。我需要以此为基础来提供使用 0 作为端点的长度。
def get_Accel_lengths( array ) :
s = ''.join( ['0' if i < 2.78 else '1' for i in resultsQ4['AccelInt']] )
parts = s.split('0')
return [len(p) for p in parts if len(p) > 0]
Q4Accel = get_Accel_lengths(resultsQ4['AccelInt'])
Q4Accel = pd.DataFrame(Q4Accel)
Q4Accel
Run Code Online (Sandbox Code Playgroud)
使用上面的示例,此代码的结果将是2
( 2.88
, 2.86
)
如果数据集中多次出现这种情况,这会起作用吗?我想辨认出每一个。
让我们使用全局布尔标志来切换来识别多个序列takewhile
。我只是将您的数据连接到自身上以模拟两个序列:dropwhile
groupby
from itertools import groupby
def keyfunc(datum):
global in_sequence
if datum < 0:
in_sequence = False
elif datum > 2.78:
in_sequence = True
return in_sequence
data = [
-1.1, -1, 0, 1.2, 1.8, 2, 2.88, 2.86,
2.53, 1.98, 1.21, 0.89, 0.11, -0.21,
-1.1, -1, 0, 1.2, 1.8, 2, 2.88, 2.86,
2.53, 1.98, 1.21, 0.89, 0.11, -0.21,
]
sequences = []
in_sequence = False
for valid, sequence in groupby(data, keyfunc):
if valid:
sequences.append(list(sequence))
print(*sequences, sep='\n')
print(*map(len, sequences), sep='\n')
Run Code Online (Sandbox Code Playgroud)
输出
> python3 test.py
[2.88, 2.86, 2.53, 1.98, 1.21, 0.89, 0.11]
[2.88, 2.86, 2.53, 1.98, 1.21, 0.89, 0.11]
7
7
>
Run Code Online (Sandbox Code Playgroud)
是否可以将其收紧,只提供我想要的 len 数字,然后转换为 df 并导出为 csv?
也许是这样的:
from itertools import groupby
data = [
-1.1, -1, 0, 1.2, 1.8, 2, 2.88, 2.86,
2.53, 1.98, 1.21, 0.89, 0.11, -0.21,
-1.1, -1, 0, 1.2, 1.8, 2, 2.88, 2.86,
2.53, 1.98, 1.21, 0.89, 0.11, -0.21,
]
def sequence_lengths(data):
in_sequence = False
def keyfunc(datum):
nonlocal in_sequence
if datum < 0:
in_sequence = False
elif datum > 2.78:
in_sequence = True
return in_sequence
lengths = []
for valid, sequence in groupby(data, keyfunc):
if valid:
lengths.append(len(list(sequence)))
return lengths
print(sequence_lengths(data))
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
91 次 |
最近记录: |