<< home

Pandas DataFrameの応用

pandasDataFrameでは、大量のデータを効率的に処理するための高度な操作が可能です。本章では、データの集約や結合を行うためのgroupbyitertuples()の使い方、およびconcatmergejoinを用いたデータの結合方法について詳しく解説します。


1. groupby() を使ったデータの集約

groupby() を使うと、特定の列の値に基づいてデータをグループ化し、統計情報を計算できます。

1.1 基本的な使い方

import pandas as pd # サンプルデータ data = { '名前': ['Alice', 'Bob', 'Charlie', 'Alice', 'Bob', 'Charlie'], '科目': ['数学', '数学', '数学', '英語', '英語', '英語'], '得点': [80, 90, 85, 88, 78, 92] } df = pd.DataFrame(data) # 科目ごとに得点の平均を計算 print(df.groupby('科目')['得点'].mean())

出力例:

科目 数学 85.0 英語 86.0 Name: 得点, dtype: float64

1.2 複数の集約関数を適用

print(df.groupby('科目')['得点'].agg(['mean', 'sum', 'max']))

出力例:

mean sum max 科目 数学 85.0 255 90 英語 86.0 258 92

1.3 複数の列でグループ化

print(df.groupby(['名前', '科目'])['得点'].sum())

2. itertuples() を使ったデータの効率的な処理

itertuples()DataFrame を行ごとにタプルとして取得する方法で、iterrows() よりも高速です。

2.1 基本的な使い方

for row in df.itertuples(): print(row)

出力例:

Pandas(Index=0, 名前='Alice', 科目='数学', 得点=80) Pandas(Index=1, 名前='Bob', 科目='数学', 得点=90) ...

2.2 特定の列を取得

for row in df.itertuples(): print(row.名前, row.得点) # 名前と得点のみ取得

3. DataFrame の結合 (concat, merge, join)

pandas にはデータを結合するための複数の関数があります。

3.1 concat() を使ったデータの結合

concat() は複数の DataFrame を単純に縦または横に結合する方法です。

df1 = pd.DataFrame({'ID': [1, 2, 3], '名前': ['Alice', 'Bob', 'Charlie']}) df2 = pd.DataFrame({'ID': [4, 5], '名前': ['David', 'Emma']}) # 縦に結合 result = pd.concat([df1, df2], ignore_index=True) print(result)

出力例:

ID 名前 0 1 Alice 1 2 Bob 2 3 Charlie 3 4 David 4 5 Emma

3.2 merge() を使ったデータの結合

merge()SQL のような方法で結合できます。

df1 = pd.DataFrame({'ID': [1, 2, 3], '名前': ['Alice', 'Bob', 'Charlie']}) df2 = pd.DataFrame({'ID': [1, 2, 4], '得点': [80, 90, 85]}) # 'ID' をキーにして内部結合 result = pd.merge(df1, df2, on='ID', how='inner') print(result)

出力例:

ID 名前 得点 0 1 Alice 80 1 2 Bob 90

3.3 join() を使ったデータの結合

join() はインデックスを基にデータを結合します。

df1 = pd.DataFrame({'名前': ['Alice', 'Bob', 'Charlie']}, index=[1, 2, 3]) df2 = pd.DataFrame({'得点': [80, 90, 85]}, index=[1, 2, 4]) # インデックスを基に結合 result = df1.join(df2, how='inner') print(result)

出力例:

名前 得点 1 Alice 80 2 Bob 90

4. まとめ

関数 目的
groupby() データをグループ化し、統計処理を行う
itertuples() 高速に DataFrame の行を取得する
concat() 縦または横にデータを結合する
merge() SQL のようにキーを基に結合する
join() インデックスを基にデータを結合する

pandas のこれらの機能を活用することで、データの集約や結合を効率的に行うことができます。



<< home