【Pandas】DataFrameのカラムどうしの演算

Pandas
この記事は約7分で読めます。

こんにちは、JS2IIUです。

PandasのDataFrameでは、各カラム(列)に格納されたデータ同士で演算を行うことが簡単にできます。エクセルで列ベースの計算式を使っている場合は、この内容を把握することで簡単にPandasに置き換えできるようになると思います。今回もよろしくお願いします。

1. はじめに

データ分析では、異なるカラムのデータを組み合わせて新しい情報を作り出すことがよくあります。例えば:

  • 売上データから利益を計算する。
  • 株価データでリターンを計算する。

この記事では、基本的な算術演算から複雑なカスタム計算まで、DataFrameのカラム同士の演算方法を解説します。

2. 基本的な演算方法

DataFrameのカラム同士の演算は、Pythonの基本的な演算子(+, -, *, / など)を用いて簡単に実現できます。

サンプルコード: カラムの加算

Python
import pandas as pd

# サンプルデータの作成
data = {
    'Price': [100, 200, 300],
    'Quantity': [2, 3, 4]
}
df = pd.DataFrame(data)

# カラム同士の加算
df['Total'] = df['Price'] * df['Quantity']
print(df)

出力:

Plaintext
   Price  Quantity  Total
0    100         2    200
1    200         3    600
2    300         4   1200

解説:

  • PriceカラムとQuantityカラムの要素同士を掛け算し、その結果をTotalという新しいカラムに格納しています。

サンプルコード: カラムの除算

Python
# 除算の例
df['Unit_Price'] = df['Price'] / df['Quantity']
print(df)

出力:

Plaintext
   Price  Quantity  Total  Unit_Price
0    100         2    200       50.0
1    200         3    600       66.7
2    300         4   1200       75.0

解説:

  • PriceカラムをQuantityカラムで割り、新しいカラムUnit_Priceを作成しました。

3. 条件付き演算

特定の条件を満たす場合のみ演算を行いたいときは、条件式を用いることで柔軟な処理が可能です。

サンプルコード: 条件付きの計算

Python
# 条件に基づいた計算
df['Discounted_Total'] = df['Total'].where(df['Quantity'] > 3, df['Total'] * 0.9)
print(df)

出力:

Plaintext
   Price  Quantity  Total  Unit_Price  Discounted_Total
0    100         2    200       50.0             180.0
1    200         3    600       66.7             540.0
2    300         4   1200       75.0            1200.0

解説:

  • whereを使用して、Quantityが3以下の場合にはTotalに10%の割引を適用しています。
  • 条件を満たさない場合(Quantity > 3)には、元のTotalをそのまま使用しています。

4. 複数カラムの演算

複数のカラムを同時に使用して計算することも可能です。

サンプルコード: 売上データの分析

Python
# 複数カラムを使用した計算
data = {
    'Sales': [1000, 1500, 2000],
    'Cost': [700, 1000, 1300]
}
df = pd.DataFrame(data)

# 利益を計算
df['Profit'] = df['Sales'] - df['Cost']
print(df)

出力:

Plaintext
   Sales  Cost  Profit
0   1000   700     300
1   1500  1000     500
2   2000  1300     700

解説:

  • 売上(Sales)から原価(Cost)を引いて利益(Profit)を計算しています。

5. カスタム関数を用いた演算

複雑な計算を行う場合は、applyメソッドを使用してカスタム関数を適用できます。

サンプルコード: カスタム計算

Python
# カスタム関数を用いた計算
def calculate_margin(row):
    return (row['Profit'] / row['Sales']) * 100

df['Profit_Margin'] = df.apply(calculate_margin, axis=1)
print(df)

出力:

Plaintext
   Sales  Cost  Profit  Profit_Margin
0   1000   700     300           30.0
1   1500  1000     500           33.3
2   2000  1300     700           35.0

解説:

  • applyを使って行単位でカスタム関数calculate_marginを適用し、利益率(Profit_Margin)を計算しています。
  • axis=1は行単位で計算することを指定しています。

6. 演算時の注意点

6.1 データ型の確認と変換

演算するカラムのデータ型が数値型であることを確認してください。文字列型の場合はto_numericで変換できます。

Python
# データ型の変換
df['Sales'] = pd.to_numeric(df['Sales'], errors='coerce')

6.2 欠損値の処理

NaNが含まれる場合の演算結果はNaNになります。欠損値を埋めることで問題を回避できます。

Python
# 欠損値の補完
df.fillna(0, inplace=True)

7. まとめ

この記事では、PandasのDataFrameにおけるカラム同士の演算方法を紹介しました。

  • 基本的な算術演算。
  • 条件付き演算。
  • 複数カラムを使用した演算。
  • カスタム関数を用いた複雑な計算。

これらを組み合わせることで、より高度なデータ処理が可能になります。ぜひ、実際のデータ分析で活用してみてください。

参考リンク

今回も少しだけPRです。

Pandasについて詳しく知りたいかた、もっと使いこなしたい方におすすめの本です。数年前に購入しましたが、今も手元に置いて時々見返しています。

「pandasクックブック Pythonによるデータ処理のレシピ」Theodore Petrou著、黒川利明訳。

最後まで読んでいただきありがとうございます。73

コメント

タイトルとURLをコピーしました