首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算分数的变化并增加新的栏熊猫

计算分数的变化并增加新的栏熊猫
EN

Stack Overflow用户
提问于 2022-06-09 13:30:07
回答 5查看 34关注 0票数 0

我期待着计算两个时间点之间每个人的心理健康分数的变化。

每个用户都有一个名字,以及3个不同时间点的心理健康评分。我想计算一下心理健康分数在3点到1点之间的变化。

下面是我从下面开始的df示例:

代码语言:javascript
复制
User   Timepoint   Mental Health Score
Bill       1               5
Bill       2               10
Bill       3               15
Wiz        1               10
Wiz        2               10
Wiz        3               15
Sam        1               5
Sam        2               5
Sam        3               5

这是所需的输出:

代码语言:javascript
复制
User   Timepoint   Mental Health Score      Change in Mental Health (TP1 and 3) 
Bill       1               5                               
Bill       2               10
Bill       3               15                              10
Wiz        1               10
Wiz        2               10
Wiz        3               15                              5
Sam        1               5
Sam        2               5
Sam        3               5                               0

有人知道怎么做吗?

EN

回答 5

Stack Overflow用户

发布于 2022-06-09 13:35:29

您可以使用shift()np.where()完成这一任务。

代码语言:javascript
复制
df['Change in Mental Health (TP1 and 3)'] = df['Mental Health Score'] - df['Mental Health Score'].shift(2)
df['Change in Mental Health (TP1 and 3)'] = np.where(df['Timepoint'] != 3, 0, df['Change in Mental Health (TP1 and 3)']).astype(int)
df
票数 1
EN

Stack Overflow用户

发布于 2022-06-09 13:38:40

尝试使用groupbywhere

代码语言:javascript
复制
#sort by Timepoint if needed
#df = df.sort_values("Timepoint")

changes = df.groupby("User")["Mental Health Score"].transform('last')-df.groupby("User")["Mental Health Score"].transform('first')
df["Change"] = changes.where(df["Timepoint"].eq(3))

>>> df
   User  Timepoint  Mental Health Score  Change
0  Bill          1                    5     NaN
1  Bill          2                   10     NaN
2  Bill          3                   15    10.0
3   Wiz          1                   10     NaN
4   Wiz          2                   10     NaN
5   Wiz          3                   15     5.0
6   Sam          1                    5     NaN
7   Sam          2                    5     NaN
8   Sam          3                    5     0.0
票数 1
EN

Stack Overflow用户

发布于 2022-06-09 13:40:21

正如注释中已经指出的,您可以在groupbyUser上计算数据,并在Mental Health Score上计算差异。

我在这里放了一段代码来演示

代码语言:javascript
复制
def _overall_change(scores):
  return scores.iloc[-1] - scores.iloc[0]

person = df.groupby('User')['Score'].agg(_overall_change)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72561209

复制
相关文章

相似问题

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