SWELL公式サイトへ 詳しくはこちら

Pandasでマスターするデータフレームの結合と集計: 実践ガイドとテクニック

  • URLをコピーしました!
目次

1.はじめに

データが爆発的に増加している現代において、その膨大なデータを解析し、有用な情報を引き出すことは、あらゆる業界での成功の鍵となっています。データ分析は、ビジネスの意思決定、科学研究、技術開発など、多岐にわたる分野で活用されており、データから新たな価値を生み出す力を持っています。このような背景のもと、データ分析を行うための強力なツールとして、Python言語のライブラリ「Pandas」が広く使われています。

Pandasは、様々な形式のデータを効率的に操作し、分析するための高機能なデータ構造とデータ分析ツールを提供します。特に、Pandasの「データフレーム」は、複雑なデータセットを扱う際に非常に便利で、データ科学者やアナリストにとって欠かせない存在です。データフレームを使えば、大量のデータを一目で理解し、分析し、加工することが可能になります。

しかし、その強力さゆえに、Pandasの機能を最大限に活用するためには、その基本的な操作方法を習得する必要があります。中でも、データフレームの結合や集計は、日々のデータ分析作業において非常に頻繁に使用される操作です。これらの操作をマスターすることで、より複雑なデータ分析が手軽に、かつ効率的に行えるようになります。

本記事では、Pandasを用いたデータフレームの結合と集計の基本から応用までを解説します。縦や横の結合、キーによる結合、さまざまな結合方法、そしてデータの集計方法に至るまで、具体的なコード例を交えながら詳細に説明していきます。この記事を通じて、読者の皆様がPandasの強力な機能をより深く理解し、自身のデータ分析スキルを向上させることができれば幸いです。

2. データフレームの基本操作

データフレームとは?

Pandasの中心となる概念の一つに「データフレーム(DataFrame)」があります。データフレームは、表形式のデータ構造を提供し、様々なタイプのデータ(数値、文字列、日時など)を列ごとに格納できます。ExcelのスプレッドシートやSQLのテーブルに似た形をしており、行と列にラベルを付けることができます。この機能により、データの操作、集計、可視化が直感的に、そして効率的に行えるのです。

データフレームは、複数の「シリーズ(Series)」オブジェクトが合わさってできています。シリーズとは、Pandasで1次元のデータを扱うためのオブジェクトです。つまり、データフレームはそれぞれの列がシリーズとして機能し、複数の列が組み合わさって2次元のデータ構造を形成しています。

結合前の準備:データフレームの作成方法

データフレームを使い始める前に、まずはデータフレームを作成する方法を学びましょう。Pandasでは、様々なデータソースからデータフレームを作成することができます。以下に、最も一般的なデータフレームの作成方法をいくつか紹介します。

  • 辞書からデータフレームを作成する:
    Pythonの辞書を使って、キーを列名、値をデータとしてデータフレームを作成できます。この方法は、プログラム内で直接データを定義したい場合に便利です。
import pandas as pd

data = {
    'Name': ['Taro', 'Jiro', 'Saburo'],
    'Age': [25, 22, 28],
    'City': ['Tokyo', 'Osaka', 'Nagoya']
}

df = pd.DataFrame(data)
print(df)
  • CSVファイルからデータフレームを作成する:
    pd.read_csv()関数を使用して、CSVファイルから直接データフレームを読み込むことができます。データ分析を行う際に、外部データを取り込む基本的な方法です。
df = pd.read_csv('path/to/your/file.csv')
print(df)
  • Excelファイルからデータフレームを作成する:
    pd.read_excel()関数を使用することで、Excelファイルからデータフレームを読み込むことが可能です。この方法は、ビジネスの現場で特に役立ちます。
df = pd.read_excel('path/to/your/file.xlsx')
print(df)

これらの方法をマスターすることで、様々なデータソースからデータフレームを作成し、Pandasを使用したデータ分析の準備を整えることができます。

3. データフレームの結合方法

データ分析を進める過程で、異なるデータセットを結合して分析する必要がよくあります。Pandasでは、このような結合操作を行うための複数の方法を提供しています。データの結合は主に、縦方向の結合と横方向の結合に大別されますが、それぞれに適した関数が用意されています。

縦の結合:concat

  • concat関数:
    pd.concat()関数は、リスト形式で渡された複数のデータフレームを縦方向または横方向に結合することができます。縦方向の結合の場合、列の名前が一致する行同士が結合されます。
import pandas as pd

df1 = pd.DataFrame({'A': ['A0', 'A1'], 'B': ['B0', 'B1']})
df2 = pd.DataFrame({'A': ['A2', 'A3'], 'B': ['B2', 'B3']})

result = pd.concat([df1, df2], ignore_index=True)
print(result)

横の結合:mergejoin

  • merge関数:
    pd.merge()関数は、共通の列またはインデックスを基にして二つのデータフレームを横方向に結合します。SQLの結合操作に似ており、非常に柔軟な結合条件を指定することができます。
df1 = pd.DataFrame({'Key': ['K0', 'K1', 'K2'], 'A': ['A0', 'A1', 'A2']})
df2 = pd.DataFrame({'Key': ['K0', 'K1', 'K2'], 'B': ['B0', 'B1', 'B2']})

result = pd.merge(df1, df2, on='Key')
print(result)
  • join関数:
    join()関数は、インデックスを基にして二つのデータフレームを横方向に結合します。デフォルトでは左結合を行いますが、結合方法を指定することも可能です。
df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2']}, index=['K0', 'K1', 'K2'])
df2 = pd.DataFrame({'B': ['B0', 'B1', 'B2']}, index=['K0', 'K1', 'K2'])

result = df1.join(df2)
print(result)

キーによる結合:単数キー結合と複数キー結合

merge関数を用いることで、単一のキー(列名)による結合のほか、複数のキーを指定して結合することもできます。複数キーで結合する場合、onパラメータにキーのリストを渡します。

結合方法:内部結合(Inner Join)、外部結合(Outer Join)、左結合(Left Join)、右結合(Right Join)

Pandasのmerge関数では、SQLと同様に、内部結合、全外部結合、左外部結合、右外部結合を指定することができます。

  • 内部結合(Inner Join): 両方のデータフレームに存在するキーのみを結合
  • 全外部結合(Outer Join): どちらかのデータフレームに存在するキーをすべて結合
  • 左外部結合(Left Join): 左側のデータフレームのキーを基に結合
  • 右外部結合(Right Join): 右側のデータフレームのキーを基に結合

これらの結合方法は、howパラメータを使用してmerge関数に指定します。

結合の命令文と使用例の表

以下の表は、様々な結合方法とその使用例をまとめたものです。

結合方法使用関数使用例
縦の結合concatpd.concat([df1, df2])
横の結合merge, joinpd.merge(df1, df2, on='Key'), df1.join(df2)
単数キー結合mergepd.merge(df1, df2, on='Key')
複数キー結合mergepd.merge(df1, df2, on=['Key1', 'Key2'])
内部結合mergepd.merge(df1, df2, how='inner')
全外部結合mergepd.merge(df1, df2, how='outer')
左外部結合mergepd.merge(df1, df2, how='left')
右外部結合mergepd.merge(df1, df2, how='right')

例)複数キーでの左外部結合

異なる列名を持つデータフレーム間で結合を行う場合、merge関数のleft_onおよびright_onパラメータを使用して、それぞれのデータフレームの結合キーを指定します。左外部結合を行う場合、howパラメータに'left'を設定します。これにより、左のデータフレームの全てのレコードが結果に含まれ、右のデータフレームに対応するレコードが存在する場合のみ、その情報が結合されます。

使用例

以下に、df1df2が異なる列名を持ち、複数のキーを使用して左外部結合を行う具体的な例を示します。

まずは、結合する二つのデータフレームを作成します。df1Key1Key2の列を持ち、df2はこれらに対応するが列名が異なるKey1_primeKey2_primeを持つとします。

import pandas as pd

# データフレームの作成
df1 = pd.DataFrame({
    'Key1': ['K0', 'K1', 'K2', 'K3'],
    'Key2': ['K0', 'K1', 'K2', 'K3'],
    'A': ['A0', 'A1', 'A2', 'A3'],
    'B': ['B0', 'B1', 'B2', 'B3']
})

df2 = pd.DataFrame({
    'Key1_prime': ['K0', 'K1', 'K2'],
    'Key2_prime': ['K0', 'K1', 'K2'],
    'C': ['C0', 'C1', 'C2'],
    'D': ['D0', 'D1', 'D2']
})

次に、merge関数を用いてdf1df2を左外部結合します。ここでleft_onにはdf1の結合キー列名のリストを、right_onにはdf2の結合キー列名のリストを指定します。

# 左外部結合
result = pd.merge(df1, df2, how='left', left_on=['Key1', 'Key2'], right_on=['Key1_prime', 'Key2_prime'])

print(result)

このコードを実行すると、df1の全てのレコードが保持され、df2の対応するレコードが結合された新しいデータフレームが生成されます。結合キーに一致するレコードがdf2に存在しない場合、結果のデータフレームにはその部分がNaNで埋められます。

この方法を使用することで、異なる列名を持つデータフレーム間でも柔軟に結合操作を行うことが可能です。特に、異なるデータソースから得られた情報を統合する際に非常に便利です。

4. データフレームの並び替え

データを分析する際、特定の列に基づいてデータの並び替えを行うことは一般的な操作の一つです。Pandasでは、sort_valuesメソッドを用いて、簡単にこの操作を行うことができます。ここでは、単一条件および複数条件によるデータフレームの並び替え方法を見ていきましょう。

単一条件による並び替え:sort_values

sort_valuesメソッドは、指定された列に基づいてデータフレームの行を並び替えます。デフォルトでは昇順に並び替えられますが、ascending=Falseパラメータを設定することで降順にすることも可能です。

使用例

import pandas as pd

df = pd.DataFrame({
    'Name': ['Taro', 'Jiro', 'Saburo'],
    'Age': [25, 22, 28]
})

# 年齢に基づいて昇順に並び替え
sorted_df = df.sort_values(by='Age')
print(sorted_df)

# 年齢に基づいて降順に並び替え
sorted_df_desc = df.sort_values(by='Age', ascending=False)
print(sorted_df_desc)

複数条件による並び替え

sort_valuesメソッドは、複数の列を指定することで、複数条件に基づく並び替えもサポートしています。この場合、byパラメータに列名のリストを渡し、ascendingパラメータにそれぞれの列に対する並び替え順序(昇順か降順か)のブール値のリストを渡します。

使用例

# 名前を昇順に、年齢を降順に並び替え
sorted_df_multi = df.sort_values(by=['Name', 'Age'], ascending=[True, False])
print(sorted_df_multi)

並び替えの命令文と使用例の表

機能命令文使用例
単一条件による昇順並び替えDataFrame.sort_values(by=)df.sort_values(by='Age')
単一条件による降順並び替えDataFrame.sort_values(by=, ascending=False)df.sort_values(by='Age', ascending=False)
複数条件による並び替えDataFrame.sort_values(by=[, ], ascending=[, ])df.sort_values(by=['Name', 'Age'], ascending=[True, False])

このセクションでは、Pandasのsort_valuesメソッドを用いたデータフレームの並び替え方法について説明しました。単一条件および複数条件を用いた並び替えはデータ分析の際に非常に役立つため、これらの操作を適切に使いこなせるようになることが重要です。

5. データフレームでの集計操作

データ分析の過程でデータセットの要約や統計を取得することは非常に一般的です。Pandas は、groupbyメソッドを始点として、集約(agg)、変換(transform)、フィルタリング(filter)など、複雑な集計操作を簡単に実行できる強力なツールを提供しています。

集計の基本:groupby

groupbyメソッドは、特定の条件に基づいてデータをグループ化し、それぞれのグループに対して集計操作を適用することができます。この方法は、SQLのGROUP BY句に類似しており、データセット内のカテゴリ別の統計を得る際に便利です。

使用例

import pandas as pd

df = pd.DataFrame({
    'Category': ['A', 'B', 'A', 'B'],
    'Data': [10, 15, 10, 20]
})

# カテゴリごとにデータの合計を計算
grouped = df.groupby('Category').sum()
print(grouped)

複雑な集計:集約(agg)、変換(transform)、フィルタ(filter

  • 集約(agg:
    aggメソッドを使用することで、グループ化されたデータに対して、複数の集計関数を同時に適用することができます。
# カテゴリごとにデータの合計と平均を計算
result_agg = df.groupby('Category').agg(['sum', 'mean'])
print(result_agg)
  • 変換(transform:
    transformメソッドは、グループ化されたデータに関数を適用するものの、元のデータフレームと同じ形状のデータフレームを返します。これは、グループ内の値をグループの統計で置き換える際に有用です。
# 各データを、そのカテゴリ内での平均で置き換える
result_transform = df.groupby('Category')['Data'].transform('mean')
print(result_transform)
  • フィルタ(filter:
    filterメソッドを用いると、特定の条件を満たすグループのみを抽出することができます。
# データの合計が20以上のカテゴリのみを抽出
result_filter = df.groupby('Category').filter(lambda x: x['Data'].sum() >= 20)
print(result_filter)

集計の命令文と使用例の表

操作命令文使用例
基本集計DataFrame.groupby().sum()などdf.groupby('Category').sum()
複数集計DataFrame.groupby().agg()df.groupby('Category').agg(['sum', 'mean'])
変換DataFrame.groupby().transform()df.groupby('Category')['Data'].transform('mean')
フィルタDataFrame.groupby().filter()df.groupby('Category').filter(lambda x: x['Data'].sum() >= 20)

6. 実践例:データフレームの結合と集計

このセクションでは、具体的なデータ分析例を通じて、Pandasを使用したデータフレームの結合と集計の実践方法を見ていきます。以下の例では、売上データと顧客データが別々のデータフレームに格納されている状況を想定し、これらを結合してから、商品カテゴリごとの売上合計を集計します。

例題の説明とコード

  • データフレームの準備:
    最初に、売上データと顧客データを表す二つのデータフレームを作成します。
import pandas as pd

# 売上データ
sales_data = pd.DataFrame({
    'CustomerID': [1, 2, 3, 4],
    'Product': ['Apple', 'Banana', 'Apple', 'Banana'],
    'Amount': [100, 150, 200, 100]
})

# 顧客データ
customer_data = pd.DataFrame({
    'CustomerID': [1, 2, 3, 4],
    'Name': ['Taro', 'Jiro', 'Saburo', 'Shiro']
})
  • データフレームの結合:
    次に、merge関数を使用して売上データと顧客データを結合します。
merged_data = pd.merge(sales_data, customer_data, on='CustomerID')
  • データの集計:
    最後に、groupbyメソッドとsum関数を用いて、商品カテゴリごとの売上合計を集計します。
sales_summary = merged_data.groupby('Product').agg(TotalAmount=('Amount', 'sum'))
print(sales_summary)

詳しい実行手順と結果の解析

  1. データフレームの準備: 上記のコードでは、まず売上データと顧客データがそれぞれ異なるデータフレームに格納されています。売上データには顧客ID、商品名、売上金額が、顧客データには顧客IDと顧客名が含まれています。
  2. データフレームの結合: pd.merge()を使用して、CustomerIDをキーとして売上データと顧客データを結合します。これにより、各売上記録に顧客名が追加された新しいデータフレームが作成されます。
  3. データの集計: 結合したデータに対して、groupbyメソッドを用いて商品ごとにグループ化し、aggメソッドで各商品カテゴリの売上合計を計算します。

このプロセスを通じて、売上データと顧客データから有用な情報を抽出し、商品カテゴリごとの売上合計を明らかにすることができました。このような結合と集計の操作は、実際のビジネスシーンにおいても顧客行動の分析や売上予測など、多岐にわたる分析に応用することができます。

7. まとめ

この記事では、Pandasライブラリを使用したデータフレームの基本操作から、より複雑な結合と集計操作に至るまで、幅広いテクニックを紹介しました。PandasはPythonでデータ分析を行う際の強力なツールであり、その柔軟性と効率性はデータ分析作業を大きく加速させます。

  • データフレームの基本操作: データフレームの作成と基本的なデータ操作方法を学びました。
  • 結合操作: concatmergejoinなどの関数を用いて、データフレームを縦や横に結合し、より複雑なデータ構造を構築する方法を解説しました。
  • 集計操作: groupbyメソッドによる基本的な集計から、aggtransformfilterによるより高度な集計方法までを紹介しました。
  • 実践例: 具体的なデータ分析例を通じて、結合と集計の実際の応用方法を見てきました。

Pandasを活用することで、データの前処理、分析、そして可視化まで、データサイエンスのあらゆるフェーズで大きな効率化を実現することができます。特に、複雑なデータセットを扱う際の結合と集計は、データ分析の中核をなす作業であり、Pandasの豊富な機能を駆使することで、これらの作業を容易に、かつ正確に行うことが可能になります。

データドリブンな意思決定がますます重要となる現代において、Pandasのようなツールを使いこなすことは、データ分析のスキルセットを向上させ、ビジネスや研究での成果を最大化する上で不可欠です。この記事が、読者の皆様がPandasをより深く理解し、活用する一助となれば幸いです。

8. 参考文献とリンク

この記事を作成するにあたり、以下の資料やリソースが参考になりました。Pandasのさらなる理解を深めるためにも、これらの資料を直接ご覧になることをお勧めします。

  • Pandas公式ドキュメント:
    Pandasの機能について、最も正確で詳細な情報を提供しています。特に、データフレームの操作方法や各種メソッドの使い方について学ぶには最適なリソースです。
  • Pandas Documentation
  • 関連する外部リソース:
  • Pandasチュートリアル:
    初心者から上級者まで、幅広いレベルのPandasユーザーを対象としたチュートリアルが数多く公開されています。特に、以下のリソースは実践的で分かりやすい解説が特徴です。
  • データサイエンスにおけるPandasの活用事例:
    実際のデータサイエンスプロジェクトでPandasがどのように使われているかについての事例やチュートリアルも役立ちます。以下のリンクからは、Pandasを活用したデータ分析の具体例を学ぶことができます。

これらのリソースを通じて、Pandasの基本操作から応用技術まで、より深く理解し、実践的なスキルを身につけることができます。データ分析において、これらが貴重なガイドとなることを願っています。

よかったらシェアしてね!
  • URLをコピーしました!
目次