所属グループの平均を上回るデータだけを取り出すには?

各記録を所属グループの平均と比較します。先にグループ別の平均表を作り、その平均を元の明細に付けてから、平均を上回る行だけを残します。

説明図:グループA・B・Cに属する元のRecords表5行
架空のデータを使った説明図です。実際の画面キャプチャではありません。

各データを所属グループの平均と比べたいときは、まずグループ別の平均表を作ります。それを元の明細に結合し、値と平均の差が正の行だけを残します。たとえばBの平均が6なら、Bにある値8は対象になります。全体の平均だけで判断すると、このような行を見落とすことがあります。

比較基準はグループごとに異なる

架空のRecords全体の平均は10.4ですが、グループ別ではA=15、B=6、C=10です。Meansは最初の集計で作って保存する平均表です。比較する行自身も平均の計算に含め、平均と同じ値の行は残しません。

Records

Group Record Value
A R1 12
A R2 18
B R3 4
B R4 8
C R5 10

Means

Group Mean
A 15
B 6
C 10

平均を保存・再結合して差で絞る

  1. Recordsだけを読み込みます。「結果を整理」を開いて「集計」を追加し、Groupごとにまとめ、Valueの「平均」をMeanという項目名で作成します。「適用」を押し、A=15、B=6、C=10の3行を確認します。
  2. 各記録に所属グループの平均を付けるため、この結果をExcelに保存します。新しい作業で元のRecordsと保存した平均表Meansを読み込み、Group同士を「一致する行のみ」で結びます。Meansがグループごとに1行なら、Recordsの各行に平均が1つずつ付きます。
  3. Means側のGroupだけを非表示にし、Meanは残します。「結果を整理」→「計算」で「引き算 · A − B」を選び、A=Value、B=Mean、結果の名前=Excessにします。
  4. 計算の下に「絞り込み」を追加し、Excessが0「より大きい」と設定します。計算、絞り込みの順で適用します。
  5. R2とR4だけが残ることを確認します。Cの唯一の行R5は自分の平均と等しいため除かれます。

平均を保存・再結合して差で絞る 説明図

全体平均では拾えない行

R4の値8は全体平均10.4より小さくても、Bの平均6を超えるため含まれます。結果の1行は元の記録1件のままで、グループの集計行ではありません。

Group Record Value Mean Excess
A R2 18 15 3
B R4 8 6 2

全体平均では拾えない行 説明図

平均を求める対象を先に決める

平均を求める前に元表を絞ると、平均の対象も変わります。比較したい行と平均に含めたい行が異なる場合は、それぞれの対象範囲を決めてください。空欄や数値でない値は平均・差の計算から除外され、数値の0は平均に含まれます。

この方法では集計結果を手動で保存して結合します。SQLのウィンドウ関数を使う方法とは異なり、元の値を更新しても保存済みの平均表は変わりません。

自分のファイルで始めましょう

JOIN SHEETを使ってみる ↗

Excel・CSVの作業はPCでご利用ください。
新しいタブで開くため、作業中のデータは置き換わりません。

サンプルの検証日:

出典

How to select students who got above average? (Stack Overflow)

原文はExcelではなくSQLの質問で、所属グループの平均点を超える学生行の取得方法を尋ねています。ここでは同じデータ処理を手動の保存・再読込・結合で扱います。 上の表と手順は、この質問を参考に別途作成した架空の例です。質問者の実データや製品の利用体験ではありません。