python - 使用 groupby 列从 Min 和 Max 列值计算 Pandas Dataframe 的变化率
问题描述
我有一个如下的数据框:
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
推荐阅读
- open3d - Open3D,GLFW 错误。没有返回 GLXFBConfigs
- android - Flutter 运行:任务“:app:processDebugResources”执行失败
- c++ - C99和C++03中空指针定义的区别
- function - 带有闭包的 Haskell 字典功能
- python - 熊猫得到错误的结果时
数字,蟒蛇 - c - Makefile 不推荐使用的语法
- javascript - 反应人生游戏(点击太快时出错)
- python - 在 Python 中,为什么集合运算并集、交集和对称差之间的时间复杂度不同?
- mysql - MySQL:用一个查询选择第一个不属于帮派的成员?
- php - 来自数据库的单选按钮导航