为了账号安全,请及时绑定邮箱和手机立即绑定

根据 ID 和条件计算平均值

根据 ID 和条件计算平均值

白猪掌柜的 2023-01-04 13:36:06
这是我的数据框:       ID  Tell  Number 0       1   Yes     3   1       1   Yes     62       1   No      93       2   Yes     44       2   Yes     75       2   No      86       3   Yes     157       3   Yes     88       3   No      69       3   Yes     13# Creating the dictionarydic = {'ID': [1,1,1,2,2,2,3,3,3,3], 'Tell': ['Yes', 'Yes', 'No', 'Yes','Yes', 'No','Yes', 'Yes','No', 'Yes'], 'Number': [3,6,9,4,7,8,15,8,6,13]}# Creating the dataframedf = pd.DataFrame(dic)我想创建第 4 列,为我提供每个 ID 的平均值。仅当 Tell 列为 Yes 时,该行才用于计算平均值。所以,我的结果 df 应该是这样的:       ID  Tell  Number mean0       1   Yes     3    4.51       1   Yes     6    4.52       1   No      9    4.53       2   Yes     4    5.54       2   Yes     7    5.55       2   No      8    5.56       3   Yes     15   127       3   Yes     8    128       3   No      6    129       3   Yes     13   12我正在考虑对我的 ID 列进行分组,然后检查 Tell 列中是否存在 Yes 或 No。我不确定如何实施。请帮忙
查看完整描述

1 回答

?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

import pandas as pd


# Creating the dictionary

dic = {'ID': [1,1,1,2,2,2,3,3,3,3], 'Tell': ['Yes', 'Yes', 'No', 'Yes','Yes', 'No','Yes', 'Yes','No', 'Yes'], 'Number': [3,6,9,4,7,8,15,8,6,13]}


# Creating the dataframe

df = pd.DataFrame(dic)


df = (pd.merge(left=df, right=df[df.Tell == 'Yes'].groupby('ID')['Number'].mean(), on='ID')

        .rename(columns={'Number_x':'Number', 'Number_y':'mean'}))


print(df)

印刷:


   ID Tell  Number  mean

0   1  Yes       3   4.5

1   1  Yes       6   4.5

2   1   No       9   4.5

3   2  Yes       4   5.5

4   2  Yes       7   5.5

5   2   No       8   5.5

6   3  Yes      15  12.0

7   3  Yes       8  12.0

8   3   No       6  12.0

9   3  Yes      13  12.0


查看完整回答
反对 回复 2023-01-04
  • 1 回答
  • 0 关注
  • 55 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信