こんにちは、JS2IIUです。
PandasのDataFrameでは、各カラム(列)に格納されたデータ同士で演算を行うことが簡単にできます。エクセルで列ベースの計算式を使っている場合は、この内容を把握することで簡単にPandasに置き換えできるようになると思います。今回もよろしくお願いします。
1. はじめに
データ分析では、異なるカラムのデータを組み合わせて新しい情報を作り出すことがよくあります。例えば:
- 売上データから利益を計算する。
- 株価データでリターンを計算する。
この記事では、基本的な算術演算から複雑なカスタム計算まで、DataFrameのカラム同士の演算方法を解説します。
2. 基本的な演算方法
DataFrameのカラム同士の演算は、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)出力:
Price Quantity Total
0 100 2 200
1 200 3 600
2 300 4 1200解説:
PriceカラムとQuantityカラムの要素同士を掛け算し、その結果をTotalという新しいカラムに格納しています。
サンプルコード: カラムの除算
# 除算の例
df['Unit_Price'] = df['Price'] / df['Quantity']
print(df)出力:
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. 条件付き演算
特定の条件を満たす場合のみ演算を行いたいときは、条件式を用いることで柔軟な処理が可能です。
サンプルコード: 条件付きの計算
# 条件に基づいた計算
df['Discounted_Total'] = df['Total'].where(df['Quantity'] > 3, df['Total'] * 0.9)
print(df)出力:
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. 複数カラムの演算
複数のカラムを同時に使用して計算することも可能です。
サンプルコード: 売上データの分析
# 複数カラムを使用した計算
data = {
'Sales': [1000, 1500, 2000],
'Cost': [700, 1000, 1300]
}
df = pd.DataFrame(data)
# 利益を計算
df['Profit'] = df['Sales'] - df['Cost']
print(df)出力:
Sales Cost Profit
0 1000 700 300
1 1500 1000 500
2 2000 1300 700解説:
- 売上(
Sales)から原価(Cost)を引いて利益(Profit)を計算しています。
5. カスタム関数を用いた演算
複雑な計算を行う場合は、applyメソッドを使用してカスタム関数を適用できます。
サンプルコード: カスタム計算
# カスタム関数を用いた計算
def calculate_margin(row):
return (row['Profit'] / row['Sales']) * 100
df['Profit_Margin'] = df.apply(calculate_margin, axis=1)
print(df)出力:
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で変換できます。
# データ型の変換
df['Sales'] = pd.to_numeric(df['Sales'], errors='coerce')6.2 欠損値の処理
NaNが含まれる場合の演算結果はNaNになります。欠損値を埋めることで問題を回避できます。
# 欠損値の補完
df.fillna(0, inplace=True)7. まとめ
この記事では、PandasのDataFrameにおけるカラム同士の演算方法を紹介しました。
- 基本的な算術演算。
- 条件付き演算。
- 複数カラムを使用した演算。
- カスタム関数を用いた複雑な計算。
これらを組み合わせることで、より高度なデータ処理が可能になります。ぜひ、実際のデータ分析で活用してみてください。
参考リンク
今回も少しだけPRです。
Pandasについて詳しく知りたいかた、もっと使いこなしたい方におすすめの本です。数年前に購入しましたが、今も手元に置いて時々見返しています。
「pandasクックブック Pythonによるデータ処理のレシピ」Theodore Petrou著、黒川利明訳。
最後まで読んでいただきありがとうございます。73

