与每个组的最大差异

时间:2018-11-14 19:07:28

标签: python pandas

我有一个这样的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()

1 个答案:

答案 0 :(得分:2)

您可以使用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

注意:

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