![](/img/trans.png)
[英]Find state transition from Low to High in python (using binary search)
[英]Cut data when values transition from low to high or high to low using python?
我想知道当 B 的值转换为高于或低于设定值时,是否有一种方法(可能使用 Pandas)将数据集(下表)分成组:
一种 | 乙 |
---|---|
1 | 10 |
2 | 15 |
3 | 12 |
4 | 2 |
5 | 5 |
6 | 3 |
7 | 4 |
8 | 2 |
9 | 14 |
10 | 11 |
例如,如果转换值为 6,那么它们将被分组为:
一种 | 乙 | 团体 |
---|---|---|
1 | 10 | 一种 |
2 | 15 | 一种 |
3 | 12 | 一种 |
4 | 2 | 乙 |
5 | 5 | 乙 |
6 | 3 | 乙 |
7 | 4 | 乙 |
8 | 2 | 乙 |
9 | 14 | C |
10 | 11 | C |
重要的是要有不同的组,而不仅仅是高于/低于 6 的所有内容都在一个组中
尝试:
df['Group'] = df['A'].ge(df['B']).ne(df['A'].ge(df['B']).shift()).cumsum()
>>> df
A B Group
0 1 10 1
1 2 15 1
2 3 12 1
3 4 2 2
4 5 5 2
5 6 3 2
6 7 4 2
7 8 2 2
8 9 14 3
9 10 11 3
如果你想要字母: df['Group'].add(64).apply(chr)
这是我的建议。 不是最短的,但它有效:
import itertools
l=[(i>6)*1 for i in df.B.to_list()]
m = [(i, list(k)) for i, k in itertools.groupby(l))]
vals = ['A', 'B', 'C', 'D', 'E', 'F', 'G']
res= []
for i in range(len(m)):
res.extend([vals[i]]*len(m[i][1]))
df['Group'] = res
>>>print(df)
A B Group
0 1 10 A
1 2 15 A
2 3 12 A
3 4 2 B
4 5 5 B
5 6 3 B
6 7 4 B
7 8 2 B
8 9 14 C
9 10 11 C
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.