Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.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 使用Pandas从另一列中查找填充条件的值范围_Python_Pandas - Fatal编程技术网

Python 使用Pandas从另一列中查找填充条件的值范围

Python 使用Pandas从另一列中查找填充条件的值范围,python,pandas,Python,Pandas,这是数据帧,其中每列的前缀为c或s c表示一个类别(是或否),而s表示与该类别相关的分数 cAGR cCON cEXT cNEU cOPN sAGR sCON sEXT sNEU sOPN 2157 y y y n y 4.17 3.67 4.33 2.00 4.40 2422 y n y n y 3.95 3.25 4.20 2.60 5.00 2741 y n n n

这是数据帧,其中每列的前缀为
c
s

c
表示一个类别(是或否),而
s
表示与该类别相关的分数

     cAGR cCON cEXT cNEU cOPN  sAGR  sCON  sEXT  sNEU  sOPN
2157    y    y    y    n    y  4.17  3.67  4.33  2.00  4.40
2422    y    n    y    n    y  3.95  3.25  4.20  2.60  5.00
2741    y    n    n    n    y  4.00  3.00  2.75  2.50  4.75
2884    y    y    y    n    y  3.55  3.95  3.75  2.05  3.80
4830    n    n    n    y    y  3.05  3.05  3.40  2.80  4.35
4932    y    n    n    y    y  3.85  3.10  2.75  3.65  3.80
5611    y    n    n    n    y  3.65  3.25  2.80  1.60  4.15
5743    n    y    n    y    n  3.35  4.25  3.30  2.80  3.50
6360    y    y    n    y    y  3.85  4.35  3.20  3.60  4.80
6822    y    y    y    n    y  4.50  3.50  4.13  1.43  4.13
我试图根据同一类(
cAGR
)中的
y
n
)来获得列(
sAGR
)中的最小和最大分数,以便我能够知道正类或负类中的最小或最大分数,即这些值的范围

例如,在下面的代码中,我得到了
cAGR
y
n
值的最大值和最小值

因此,当
sAGR
中的值在
3.55
4.5
范围内时,我可以说
cAGR
y
,当
sAGR
中的值在
3.05
3.35
范围内时,
cAGR
n

下面的代码已经足够了,但它确实是重复的,我想知道是否有更好的方法来做到这一点

>>> df['sAGR'].where(df['cAGR'] == 'y').max()
4.5
>>> df['sAGR'].where(df['cAGR'] == 'y').min()
3.55
>>> df['sAGR'].where(df['cAGR'] == 'n').min()
3.05
>>> df['sAGR'].where(df['cAGR'] == 'n').max()
3.35
数据字典:

{'cAGR': {2157: 'y',
  2422: 'y',
  2741: 'y',
  2884: 'y',
  4830: 'n',
  4932: 'y',
  5611: 'y',
  5743: 'n',
  6360: 'y',
  6822: 'y'},
 'cCON': {2157: 'y',
  2422: 'n',
  2741: 'n',
  2884: 'y',
  4830: 'n',
  4932: 'n',
  5611: 'n',
  5743: 'y',
  6360: 'y',
  6822: 'y'},
 'cEXT': {2157: 'y',
  2422: 'y',
  2741: 'n',
  2884: 'y',
  4830: 'n',
  4932: 'n',
  5611: 'n',
  5743: 'n',
  6360: 'n',
  6822: 'y'},
 'cNEU': {2157: 'n',
  2422: 'n',
  2741: 'n',
  2884: 'n',
  4830: 'y',
  4932: 'y',
  5611: 'n',
  5743: 'y',
  6360: 'y',
  6822: 'n'},
 'cOPN': {2157: 'y',
  2422: 'y',
  2741: 'y',
  2884: 'y',
  4830: 'y',
  4932: 'y',
  5611: 'y',
  5743: 'n',
  6360: 'y',
  6822: 'y'},
 'sAGR': {2157: 4.17,
  2422: 3.95,
  2741: 4.0,
  2884: 3.55,
  4830: 3.05,
  4932: 3.85,
  5611: 3.65,
  5743: 3.35,
  6360: 3.85,
  6822: 4.5},
 'sCON': {2157: 3.67,
  2422: 3.25,
  2741: 3.0,
  2884: 3.95,
  4830: 3.05,
  4932: 3.1,
  5611: 3.25,
  5743: 4.25,
  6360: 4.35,
  6822: 3.5},
 'sEXT': {2157: 4.33,
  2422: 4.2,
  2741: 2.75,
  2884: 3.75,
  4830: 3.4,
  4932: 2.75,
  5611: 2.8,
  5743: 3.3,
  6360: 3.2,
  6822: 4.13},
 'sNEU': {2157: 2.0,
  2422: 2.6,
  2741: 2.5,
  2884: 2.05,
  4830: 2.8,
  4932: 3.65,
  5611: 1.6,
  5743: 2.8,
  6360: 3.6,
  6822: 1.43},
 'sOPN': {2157: 4.4,
  2422: 5.0,
  2741: 4.75,
  2884: 3.8,
  4830: 4.35,
  4932: 3.8,
  5611: 4.15,
  5743: 3.5,
  6360: 4.8,
  6822: 4.13}}

您可以尝试
groupby

df.groupby('cAGR')['sAGR'].agg(['min','max'])
输出:

       min   max
cAGR            
n     3.05  3.35
y     3.55  4.50
        min   max
cat c            
AGR n  3.05  3.35
    y  3.55  4.50
CON n  3.00  3.25
    y  3.50  4.35
EXT n  2.75  3.40
    y  3.75  4.33
NEU n  1.43  2.60
    y  2.80  3.65
OPN n  3.50  3.50
    y  3.80  5.00

Bonus如果您想使用其他后缀,请尝试使用
pd.wide\u to\u long

(pd.wide_to_long(df.reset_index(), i='index',
                stubnames=['c','s'], j='cat',
                suffix='.*' )
   .groupby(['cat','c'])['s'].agg(['min','max'])
)
输出:

       min   max
cAGR            
n     3.05  3.35
y     3.55  4.50
        min   max
cat c            
AGR n  3.05  3.35
    y  3.55  4.50
CON n  3.00  3.25
    y  3.50  4.35
EXT n  2.75  3.40
    y  3.75  4.33
NEU n  1.43  2.60
    y  2.80  3.65
OPN n  3.50  3.50
    y  3.80  5.00

谢谢,奖金答案正是我想要的!