簡體   English   中英

基於另一列創建 pandas 聚合列

[英]Creating pandas aggregate column based on another column

我正在練習 stats 和 pandas 並且我想創建一個名為“平均值”的第三列,它計算出每個分組位置的平均值,以便每個單獨的行可以使用它執行計算。 這是我開始的內容:

import pandas as pd

df = pd.DataFrame({'Location': ['Alaska', 'Alaska', 'Amsterdam', 'Amsterdam',
                                'Arkansas', 'Arkansas'],
                   'Number': ['300', '500', '250', '600', '400', '150']}

這是我想要的樣子:

數據框

real_deviations 列是為了說明我將使用它的目的。 我使用一種相當冗長的 groupby 和 merges 方式解決了這個問題,但我一直試圖找到一個更簡化的解決方案。

任何幫助,將不勝感激!

謝謝!

要生成特定位置的平均值,您需要進行 groupby 變換:

df['mean'] = df.groupby('Location')['Number'].transform('mean')

然后,您可以繼續計算偏差:

df['real_deviations'] = df['Number'] - df['mean']

PS:請務必事先將“Number”中的數字從 str 轉換為 int。 一個簡單df['Number'] = df['Number'].astype(int)就可以了。

你需要的核心能力是transform

  • 計算每行組的平均值
  • 使用此計算附加列
df = pd.DataFrame({'Location': ['Alaska', 'Alaska', 'Amsterdam', 'Amsterdam',
                                'Arkansas', 'Arkansas'],
                   'Number': ['300', '500', '250', '600', '400', '150']})
df["Number"] = df["Number"].astype(int)

df.assign(means=df.groupby("Location", as_index=False).transform("mean"),
          real_deviation=lambda d: d["Number"] - d["means"])

地點 數字 方法 真實偏差
0 阿拉斯加州 300 400 -100
1 阿拉斯加州 500 400 100
2 阿姆斯特丹 250 425 -175
3 阿姆斯特丹 600 425 175
4 阿肯色州 400 275 125
5 阿肯色州 150 275 -125

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM