亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何獲得具有指定條件的列的平均值?

如何獲得具有指定條件的列的平均值?

拉莫斯之舞 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 關注
  • 95 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號