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

如何获得具有指定条件的列的平均值?

如何获得具有指定条件的列的平均值?

拉莫斯之舞 2022-11-01 16:16:13
我有一个包含列(名称,a,b)的数据框,我想创建一个列名称“mean”,这将是列 a 和 b 的平均值,但如果任何两行的平均值相同,则其总和值为更多应该减少0.1。   data frame 1  Name  Sum  a   b      mean0 hamm   34  2   2       21 jam    54  1   1  -->  12 tan    36  3   1       23 pan    39  4   4       4正如我们现在看到的那样,第 0 行和第 2 行具有相同的平均值,所以现在谁的总和值更大应该减少 0.1在这里,在这种情况下,它的第 2 行的值应该是 2- 0.1 = 1.9最后结果  Name  Sum  a   b   mean0 hamm   34  2   2    21 jam    54  1   1    12 tan    36  3   1    1.93 pan    39  4   4    4
查看完整描述

1 回答

?
牛魔王的故事

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

您可以mean尝试cumcount

df.assign(mean = df[["a", "b"]].mean(axis=1))\

  .assign(mean = df["mean"].subtract(df.groupby("mean").cumcount().divide(10)))

输出


#    Name  Sum  a  b  mean

# 0  hamm   34  2  2   2.0

# 1   jam   54  1  1   1.0

# 2   tan   36  3  1   1.9

# 3   pan   39  4  4   4.0

说明

  1. 使用 计算平均值mean。我们指定axis=1在行上计算它。

  2. 对于每一个相同mean的,我们要减去n*0.1

    1. 我们使用groupby相同的分组所有行mean

    2. 我们使用cumcount. 有关更多详细信息,请参阅此讨论

    3. 除以10使用divide以将计数器转换为0.1, 0.2, ...

  3. 使用从步骤 2 中减去输出到meansubtract


完整代码+插图

# Step 1

df["mean"] = df[["a", "b"]].mean(axis=1)

print(df)

#    Name  Sum  a  b  mean

# 0  hamm   34  2  2   2.0

# 1   jam   54  1  1   1.0

# 2   tan   36  3  1   2.0

# 3   pan   39  4  4   4.0


# Step 2.1 + 2.2

print(df.groupby("mean").cumcount())

# 0    0

# 1    0

# 2    1

# 3    0

# dtype: int64


# Step 2.3

print(df.groupby("mean").cumcount().divide(10))

# 0    0.0

# 1    0.0

# 2    0.1

# 3    0.0

# dtype: float64


# Step 3

df["mean"] = df["mean"].subtract(df.groupby("mean").cumcount().divide(10))

print(df)

#    Name  Sum  a  b  mean

# 0  hamm   34  2  2   2.0

# 1   jam   54  1  1   1.0

# 2   tan   36  3  1   1.9

# 3   pan   39  4  4   4.0


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

添加回答

举报

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