Отклонение от максимума в каждой группе - PullRequest
0 голосов
/ 14 ноября 2018

У меня есть 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 голосов
/ 14 ноября 2018

Вы можете использовать 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.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...