У меня есть датафрейм

  Group Score Rank
   1     0     3
   1     4     1
   1     2     2
   2     3     2
   2     1     3
   2     7     1

Я должен взять разницу в баллах в следующем рейтинге внутри каждой группы. Например, в группе 1 ранг (1) - ранг (2) = 4-2

Ожидаемый результат:

    Group Score Rank  Difference
    1     0     3        0
    1     4     1        2
    1     2     2        2
    2     3     2        2
    2     1     3        0
    2     7     1        4
0
tj judge 8 Июн 2021 в 22:42

2 ответа

Лучший ответ

Можешь попробовать:

df = df.sort_values(['Group', 'Rank'],ascending = [True,False])
df['Difference'] =df.groupby('Group', as_index=False)['Score'].transform('diff').fillna(0).astype(int)

ВЫХОД:

   Group  Score  Rank  Difference
0      1      0     3           0
2      1      2     2           2
1      1      4     1           2
4      2      1     3           0
3      2      3     2           2
5      2      7     1           4

ПРИМЕЧАНИЕ. Результат сортируется по столбцу rank.

1
Nk03 8 Июн 2021 в 19:51

Я думаю, вы можете создать новый столбец для значений в следующем ранге, используя shift (), а затем вычислить разницу. Вы можете увидеть следующие коды:

# Sort the dataframe
df = df.sort_values(['Group','Rank']).reset_index(drop=True)

# Shift up values by one row within a group
df['Score_next'] = df.groupby('Group')['Score'].shift(-1).fillna(0)

# Calculate the difference
df['Difference'] = df['Score'] - df['Score_next']

Вот результат:

print(df)

   Group  Score  Rank  Score_next  Difference
0      1      4     1         2.0         2.0
1      1      2     2         0.0         2.0
2      1      0     3         0.0         0.0
3      2      7     1         3.0         4.0
4      2      3     2         1.0         2.0
5      2      1     3         0.0         1.0
1
Crystal L 8 Июн 2021 в 20:18