猿问

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

我有一个包含列(名称,a,b)的数据框,我想创建一个列名称“mean”,这将是列 a 和 b 的平均值,但如果任何两行的平均值相同,则其总和值为更多应该减少0.1。


   data frame 1


  Name  Sum  a   b      mean

0 hamm   34  2   2       2

1 jam    54  1   1  -->  1

2 tan    36  3   1       2

3 pan    39  4   4       4

正如我们现在看到的那样,第 0 行和第 2 行具有相同的平均值,所以现在谁的总和值更大应该减少 0.1


在这里,在这种情况下,它的第 2 行的值应该是 2- 0.1 = 1.9


最后结果


  Name  Sum  a   b   mean

0 hamm   34  2   2    2

1 jam    54  1   1    1

2 tan    36  3   1    1.9

3 pan    39  4   4    4


拉莫斯之舞
浏览 79回答 1
1回答

牛魔王的故事

您可以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说明:使用 计算平均值mean。我们指定axis=1在行上计算它。对于每一个相同mean的,我们要减去n*0.1。我们使用groupby相同的分组所有行mean我们使用cumcount. 有关更多详细信息,请参阅此讨论。除以10使用divide以将计数器转换为0.1, 0.2, ...使用从步骤 2 中减去输出到mean列subtract完整代码+插图# Step 1df["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.2print(df.groupby("mean").cumcount())# 0    0# 1    0# 2    1# 3    0# dtype: int64# Step 2.3print(df.groupby("mean").cumcount().divide(10))# 0    0.0# 1    0.0# 2    0.1# 3    0.0# dtype: float64# Step 3df["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
随时随地看视频慕课网APP

相关分类

Python
我要回答