繁体   English   中英

使用python在值从低到高或从高到低转换时切割数据?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM