【Python】pandasで合計列・合計行を簡単に追加!データ解析を効率化しよう

はじめに

データ解析において、データを集計することは非常に重要です。pandasはPythonのデータ解析ライブラリであり、データの加工や集計に優れた機能を持っています。本記事では、pandasを使って合計列・合計行を簡単に追加する方法について解説します。

pandasの基本的な使い方

pandasを使うためには、まずはpandasをインストールする必要があります。以下のコマンドを実行して、pandasをインストールしましょう。

!pip install pandas

データを扱うためには、pandasのDataFrameというオブジェクトを使用します。DataFrameは表形式のデータを扱うことができます。以下のように、辞書型を使ってDataFrameを作成することができます。

import pandas as pd

# 辞書型を使ってDataFrameを作成する
data = {'名前': ['山田', '田中', '鈴木'],
    '国語': [80, 70, 90],
    '数学': [75, 85, 80]}
df = pd.DataFrame(data)

# DataFrameを表示する
print(df)

実行結果は以下のようになります。

   名前  国語  数学
0  山田  80  75
1  田中  70  85
2  鈴木  90  80

DataFrameを作成する方法は他にもありますが、ここでは辞書型を使った方法を紹介しました。

合計列の追加方法

次に、DataFrameに列の合計を追加する方法を解説します。

列の合計を追加するには、pandasのsum()関数を使います。以下のように、sum()関数を使って列の合計を計算し、assign()メソッドを使って新しい列を追加することができます。

import pandas as pd

# DataFrameを作成する
data = {'名前': ['山田', '田中', '鈴木'],
        '国語': [80, 70, 90],
        '数学': [75, 85, 80]}
df = pd.DataFrame(data)

# 列の合計を計算して新しい列を追加する
df = df.assign(合計 = df.sum(axis=1))

# DataFrameを表示する
print(df)

実行結果は以下のようになります。

   名前  国語  数学  合計
0  山田  80  75  155
1  田中  70  85  155
2  鈴木  90  80  170

上記のコードで、sum()関数の引数にaxis=1を指定しているのは、列方向に合計するためです。行方向に合計する場合は、axis=0を指定します。

合計行の追加方法

次に、DataFrameに行の合計を追加する方法を解説します。

行の合計を追加するには、pandasのsum()関数を使います。以下のように、sum()関数を使って行の合計を計算し、append()メソッドを使って新しい行を追加することができます。

import pandas as pd

# DataFrameを作成する
data = {'名前': ['山田', '田中', '鈴木'],
    '国語': [80, 70, 90],
    '数学': [75, 85, 80]}
df = pd.DataFrame(data)

# 行の合計を計算して新しい行を追加する
df = df.append(df.sum(numeric_only=True), ignore_index=True)

# DataFrameを表示する
print(df)

実行結果は以下のようになります。

   名前   国語 数学
0  山田     80   75
1  田中     70   85
2  鈴木     90   80
3  NaN     240   30

上記のコードで、sum()関数の引数にnumeric_only=Trueを指定しているのは、文字列型の列も合計されるのを防ぐためです。また、ignore_index=Trueを指定することで、インデックスが自動的に振り直されます。

複数のカラム・行を同時に合計する方法

複数のカラム・行を同時に合計する場合は、sum()関数の引数に対象とするカラム・行を指定することができます。以下のように、sum()関数の引数に対象とするカラム・行を指定することができます。

以下は、国語と数学の列、山田と田中の行を同時に合計する例です。

import pandas as pd


# DataFrameを作成する
data = {'名前': ['山田', '田中', '鈴木'],
    '国語': [80, 70, 90],
    '数学': [75, 85, 80]}
df = pd.DataFrame(data)

# 国語と数学の列、山田と田中の行を同時に合計する
df = df.assign(国語数学合計 = df[['国語', '数学']].sum(axis=1))
df = df.append(df.loc[df['名前'].isin(['山田', '田中'])].sum(numeric_only=True), ignore_index=True)

# DataFrameを表示する
print(df)

実行結果は以下のようになります。

    名前    国語   数学  国語数学合計
0   山田   80.0   75.0   155.0
1   田中   70.0   85.0   155.0
2   鈴木   90.0   80.0   170.0
3  NaN  150.0  160.0   310.0

上記のコードで、df[[‘国語’, ‘数学’]]は、国語と数学の列を選択しています。また、df.loc[df[‘名前’].isin([‘山田’, ‘田中’])]は、山田と田中の行を選択しています。

実践例:具体的なデータを使った合計列・合計行の追加手順

ここでは、実際にpandasを使ってデータを集計する手順を説明します。

以下のようなCSVファイルを用意します。

年度,国語,数学,英語
2020, 80,  75,  70
2021, 85,  90,  75
2022, 90,  80,  80

このデータをpandasで読み込み、合計列と合計行を追加するコードは以下のようになります。

import pandas as pd

# CSVファイルを読み込む
df = pd.read_csv('data.csv')

# 列の合計を計算して新しい列を追加する
df = df.assign(合計 = df.sum(axis=1, numeric_only=True))

# 行の合計を計算して新しい行を追加する
df = df.append(df.sum(numeric_only=True), ignore_index=True)

# DataFrameを表示する
print(df)

実行結果は以下のようになります。

  年度 国語 数学 英語 合計
0 2020  80   75   70  225
1 2021  85   90   75  250
2 2022  90   80   80  250
3      255  245  225  725

上記のコードで、df.sum(axis=1, numeric_only=True)は、数値型の列だけを合計することを指定しています。

まとめ

pandasを使うことで、簡単に合計列・合計行を追加することができます。データ解析においては、データの集計や集計結果の表示が非常に重要です。pandasの使い方を覚えて、データ解析を効率化しましょう。