首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >得分与下一等级之差

得分与下一等级之差
EN

Stack Overflow用户
提问于 2021-06-08 19:42:10
回答 2查看 47关注 0票数 0

我有一份数据

代码语言:javascript
运行
复制
  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。

预期产出:

代码语言:javascript
运行
复制
    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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-06-08 19:51:58

你可以试试:

代码语言:javascript
运行
复制
df = df.sort_values(['Group', 'Rank'],ascending = [True,False])
df['Difference'] =df.groupby('Group', as_index=False)['Score'].transform('diff').fillna(0).astype(int)

产出:

代码语言:javascript
运行
复制
   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列排序的。

票数 2
EN

Stack Overflow用户

发布于 2021-06-08 20:18:26

我认为您可以使用shift()为下一个级别中的值创建一个新列,然后计算差异。您可以看到以下代码:

代码语言:javascript
运行
复制
# 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']

结果如下:

代码语言:javascript
运行
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67893646

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档