我有一个像这样的数据框:
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()
最佳答案
您可以使用groupby和 transform为数据帧的每一行生成 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/