gpt4 book ai didi

python - 使用 Pandas 从另一列中查找满足列中条件的值范围

转载 作者:行者123 更新时间:2023-12-02 02:22:13 24 4
gpt4 key购买 nike

这是数据帧,其中每列都有一个前缀 cs

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

我试图根据列中的 yn 来获取列 (sAGR) 中的最小和最大分数相同的类(cAGR),这样我就可以知道正类或负类的最小或最大分数是多少,即这些值的范围。

例如,在下面的代码中,我获取了 cAGRyn 的最大值和最小值。

有了这个,当 sAGR 中的值在 3.55 范围内时,我可以说 cAGRy > 到 4.5,并且当 sAGR 中的值在 3.05 范围内时,cAGRn 3.35

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

>>> 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

奖励如果您想使用其他后缀来实现此目的,请尝试 pd.wide_to_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
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

关于python - 使用 Pandas 从另一列中查找满足列中条件的值范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66227017/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com