python - Groupby 和基于特定行值的计算
问题描述
我的数据如下所示:
d = {'id' : [1, 1, 1, 2, 2, 2],
'levels': ['low', 'perfect', 'high', 'low', 'perfect', 'high'],
'value': [1, 10, 13, 2, 10, 13]}
df = pd.DataFrame(d, columns=['id', 'levels', 'value'])
df = df.groupby(['id','levels'])[['value']].mean()
对于每个 [id, levels],我想找出行的value
和行的value
之间的差异perfect
。它看起来像这样:
id | levels | value | penalty
1 | high | 13 | 3
| low | 1 | 9
| perfect| 10 | 0
2 | high | 13 | 3
| low | 2 | 8
| perfect| 10 | 0
例如,在第一行中,您将从完美值 10 中减去 13,得到 3。
那么如何进行计算,找到perfect
每个 的值[id, levels]
,然后找到差异?
解决方案
使用 选择数据框的横截面xs
,然后从给定的数据框中减去此横截面level=0
df['penalty'] = df['value'].sub(df['value'].xs('perfect', level=1)).abs()
value penalty
id levels
1 high 13 3
low 1 9
perfect 10 0
2 high 13 3
low 2 8
perfect 10 0
推荐阅读
- c - OR 操作 in if 操作
- c - 如何在 x86 架构上从 C 调用汇编函数?
- sql - SQL 按具有最新日期的列分组
- django - 无法更新 Django Rest 框架中的字段
- python - Python:使用相同键合并两个字典的最优雅方法
- c++ - C++ 整数数组转换和操作
- actions-on-google - 如何允许 Google Assistant Action 在 Chromecast 上显示信息?
- c# - Timespan.FromHours 用于十进制转换
- c++ - 如何将 ac/c++ 变量写入 shell 脚本?
- git - 我已经使用 git commit 和 git add 提交了一些项目文件。命令,但我的文件未显示在 git 存储库中