Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何根据两列的范围值执行分组?_Python_Pandas_Jupyter Notebook - Fatal编程技术网

Python 如何根据两列的范围值执行分组?

Python 如何根据两列的范围值执行分组?,python,pandas,jupyter-notebook,Python,Pandas,Jupyter Notebook,我曾尝试获得欲望输出,但多次失败。所以这里是我向python专家提出的问题 我有一个名为df的数据帧,如下所示 df:- 我想根据两列的范围(LOWVAL和HIGHVAL)执行分组 我的愿望输出表: df1:- VARIABLES Estimate LOWVAL HIGHVAL ppseg12 -0.1753 61 90 ppseg12 -0.1753 20 51 ppseg12 0.1153

我曾尝试获得欲望输出,但多次失败。所以这里是我向python专家提出的问题

我有一个名为df的数据帧,如下所示

df:-

我想根据两列的范围(LOWVAL和HIGHVAL)执行分组

我的愿望输出表:

df1:-

VARIABLES   Estimate    LOWVAL  HIGHVAL
ppseg12      -0.1753       61       90   
ppseg12      -0.1753       20       51
ppseg12       0.1153       91       100
第一行的输出逻辑:- 其聚合基于变量和估计,LOWVAL和HIGHVAL的值没有间断,例如:-61 LOWVAL-70 HIGHVAL。。71LOWVAL-80HIGHVAL。。81LOWVAL-90HIGHVAL,因此它需要最小LOWVAL和最大HIGHVAL,因为它们是数字系列(如61L 70H 71L 80H 81L 90H)

第二行的输出逻辑:- 正如您所看到的,它具有相同的变量名和相同的估计值,但它的LOWVAL和HIGHVAL范围没有连接或形成任何序列号。只需取LOWVAL和HIGHVAL的最小值和最大值

三行的输出逻辑:- 因为它有不同的估计值,并且被其他组分开。简单地取LOWVAL和HIGHVAL的最小值和最大值


提前感谢

添加两列差异,然后将差异列添加到分组中,并聚合最小值和最大值

import pandas as pd
import numpy as np
import io

data = '''
VARIABLES   Estimate    LOWVAL  HIGHVAL
ppseg12      -0.1753       20       51
ppseg12      -0.1753       61       70
ppseg12      -0.1753       71       80
ppseg12      -0.1753       81       90
ppseg12       0.1153       91      100  
'''

df = pd.read_csv(io.StringIO(data), delim_whitespace=True)
df['diff'] = df['LOWVAL'] - df['HIGHVAL']
df = df.groupby(['VARIABLES','Estimate','diff']).agg({'LOWVAL':min,'HIGHVAL':max}).reset_index()
df = df[['VARIABLES', 'Estimate', 'LOWVAL', 'HIGHVAL']]
df

VARIABLES   Estimate    LOWVAL  HIGHVAL
0   ppseg12 -0.1753 20  51
1   ppseg12 -0.1753 61  90
2   ppseg12 0.1153  91  100

这不会涵盖所有条件…例如,将31改为51。。那么这将失败。输出将如pp12-0.1753 20 90,ppseg12 0.11.53 91 100I根据您显示的数据创建代码。另一方面,您缺少将它们组合在一起的要求。
import pandas as pd
import numpy as np
import io

data = '''
VARIABLES   Estimate    LOWVAL  HIGHVAL
ppseg12      -0.1753       20       51
ppseg12      -0.1753       61       70
ppseg12      -0.1753       71       80
ppseg12      -0.1753       81       90
ppseg12       0.1153       91      100  
'''

df = pd.read_csv(io.StringIO(data), delim_whitespace=True)
df['diff'] = df['LOWVAL'] - df['HIGHVAL']
df = df.groupby(['VARIABLES','Estimate','diff']).agg({'LOWVAL':min,'HIGHVAL':max}).reset_index()
df = df[['VARIABLES', 'Estimate', 'LOWVAL', 'HIGHVAL']]
df

VARIABLES   Estimate    LOWVAL  HIGHVAL
0   ppseg12 -0.1753 20  51
1   ppseg12 -0.1753 61  90
2   ppseg12 0.1153  91  100