Python 如何根据两列的范围值执行分组?
我曾尝试获得欲望输出,但多次失败。所以这里是我向python专家提出的问题 我有一个名为df的数据帧,如下所示 df:- 我想根据两列的范围(LOWVAL和HIGHVAL)执行分组 我的愿望输出表: df1:-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
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