使用基于python的PANDAS数据帧并基于上一个问题(如何从包含2个数字序列的两列中提取数字范围并从两列中打印范围(不同的增量值)?);有以下问题:有没有一种方法可以使用pandas数据框基于每列的不同数学运算来创建数字范围?
例如:
col1 col2 criteria-col1 diff. >2 criteria-col2 diff<=3
1 23 abs(2-1)=1 ; no break abs(27-23)=4;no break
2 27 abs(4-2)=2 ; no break abs(31-27)=4;no break
4 31 abs(6-4)=2; no break abs(35-31)=4;no break
6 35 abs(9-6)=3; break abs(40-35)=5; no break but still break due to col1 criteria
9 40 abs(11-9)=2; no break abs(45-40)=5;no break
11 45 abs(13-11)=2;no break abs(49-45)=4;no break
13 49 abs (51-49)=2;no break abs (51-49)=2; break also in column 1 due to critera in col2
15 51
条件:创建数值范围,在该范围内序列(递增或递减)的值大于2
准则:创建数值范围,其中数值序列(升序或降序)的任意值<= 3都必须倾斜
预期结果应为根据上述标准序列断裂的范围:
col1_from col1_to col2_from col2_to
1 6 23 35
9 13 40 49
15 15 51 51
数据:
In [10]: df
Out[10]:
col1 col2
0 1 23
1 2 27
2 4 31
3 6 35
4 9 40
5 11 45
6 13 49
7 15 51
解决方案:
In [11]: df.groupby(df.diff().abs().eval("col1 > 2 or col2 <= 3").cumsum()) \
.agg(['min','max'])
Out[11]:
col1 col2
min max min max
0 1 6 23 35
1 9 13 40 49
2 15 15 51 51
解释:
In [12]: df.diff()
Out[12]:
col1 col2
0 NaN NaN
1 1.0 4.0
2 2.0 4.0
3 2.0 4.0
4 3.0 5.0
5 2.0 5.0
6 2.0 4.0
7 2.0 2.0
In [13]: df.diff().abs().eval("col1 > 2 or col2 <= 3")
Out[13]:
0 False
1 False
2 False
3 False
4 True
5 False
6 False
7 True
dtype: bool
In [14]: df.diff().abs().eval("col1 > 2 or col2 <= 3").cumsum()
Out[14]:
0 0
1 0
2 0
3 0
4 1
5 1
6 1
7 2
dtype: int32
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句