python - 与每组中最大值的差值

标签 python pandas

我有一个像这样的数据框:

df = pd.DataFrame({'id':['pt1','px1','t95','sx1','dc4','px5'],
'group':['f7','f7', 'f7','f8','f8','f8'],
'score':['2','3.3','4','8','4.9','6']})

我想添加另一列并计算每组中每个分数与该组最高分数之间的差异。预期结果是:

group id  score  score_diff
f7  pt1     2         -2
f7  px1   3.3        -.7
f7  t95     4          0
f8  sx1     8          0
f8  dc4   4.9        -3.1
f8  px5     6         -2

如果您能提供帮助,我将不胜感激。我想在 2000 多条记录上运行代码。下面是我的代码,但它给了我与每组之前记录的分数差异。但是,我想计算每组中与最高分的分数差。

result = df.groupby(['fk'])['score'].diff()

最佳答案

您可以使用groupbytransform为数据帧的每一行生成 max,然后使用简单的减法运算来获得所需的输出。这是一个有效的示例。

In [1]: df
Out[1]: 
  group   id score
0    f7  pt1     2
1    f7  px1   3.3
2    f7  t95     4
3    f8  sx1     8
4    f8  dc4   4.9
5    f8  px5     6

In[2]: df['score'] = df.score.astype(float)

In[3]: df['score_diff'] = df.score - df.groupby('group')['score'].transform('max')

In[4]: df
Out[4]: 
  group   id  score  score_diff
0    f7  pt1    2.0        -2.0
1    f7  px1    3.3        -0.7
2    f7  t95    4.0         0.0
3    f8  sx1    8.0         0.0
4    f8  dc4    4.9        -3.1
5    f8  px5    6.0        -2.0

注意:

  • 请确保分数列是数字(例如:float),我使用df.score.astype(float)将其转换为float。

关于python - 与每组中最大值的差值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53307167/

相关文章:

python - Django 忽略测试数据库设置

android - 如何将 python shell 转换为 android 应用程序

python - 查找不同维度数组的最近邻居

python - Numpy 选择默认条件返回错误值

Python - 使用 DataReader 连接数据帧列表

python - 提取 pandas 数据框中一组行之后的行窗口

python - Gimp:为什么我不能注册这个?

python - 使用Python中的文件中的位数组读取带有 header 的二进制文件

python - 使用 Pandas 库将日期/时间转换为月份后获取 float 而不是整数

python - Pandas :缓冲区的维数错误