python - 使用 groupby 列根据最小和最大列值计算 Pandas Dataframe 的变化率

标签 python python-3.x pandas dataframe pandas-groupby

我有一个如下所示的数据框:

NAME,VAL1,VAL2
AAA,27,678
BBB,45,744
CCC,34,275
AAA,29,932
CCC,47,288
BBB,24,971
AAA,16,468
BBB,90,982
CCC,68,751
AAA,23,254
CCC,87,575
CCC,63,364

需要计算每个名字,

Result_Val1 = ((Max of Val1 - Min of Val1)/Min of Val1) 
Result_Val2 = ((Max of Val2 - Min of Val2)/Min of Val2)

结果应如下所示:

NAME,Result_Val1,Result_Val2
AAA,0.81,2.67
BBB,2.75,0.32
CCC,1.56,1.73

最佳答案

类似于groupby之类的东西,然后进行一些算术应该可以。

v = df.groupby('NAME').agg(['max', 'min'])

mx = v.xs('max', level=1, axis=1)
mn = v.xs('min', level=1, axis=1)
(mx - mn) / mn

          VAL1      VAL2
NAME                    
AAA   0.812500  2.669291
BBB   2.750000  0.319892
CCC   1.558824  1.730909
<小时/>

让我们尝试使用自定义函数的替代方案:

def scaled_ptp(x):
    mn = x.min()
    return (x.max() - mn) / mn

df.groupby('NAME').agg(scaled_ptp)

您可以在一行中执行相同的操作,但需要 python3.8 中的赋值表达式:

df.groupby('NAME').agg(lambda x: (x.max() - y := x.min()) / y)

          VAL1      VAL2
NAME                    
AAA   0.812500  2.669291
BBB   2.750000  0.319892
CCC   1.558824  1.730909

关于python - 使用 groupby 列根据最小和最大列值计算 Pandas Dataframe 的变化率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51906998/

相关文章:

python - 如何在使用 Robot Framework 时打印可用标签

python - Setuptools 循环 dependency_links

python - 在 pandas DataFrame 中提取最佳性能代理的时间序列

python - 在 urllib.requests 中启用重定向

Python 3.4 输入?

python - 将通配符应用于 Pandas isin 过滤器

python - 转换数据框以进行网络绘图

python - Dropbox API v2 使用 python 上传大文件

python - Python 中的简单用户名和密码应用程序

python - 多维数组之间的欧氏距离的 Numpy 运算