我有一个这样的DataFrame:
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()
答案 0 :(得分:2)
您可以使用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
注意:
df.score.astype(float)
将其转换为浮点数。