KAMEYA_WORKS
DataFrame
の応用pandas
のDataFrame
では、大量のデータを効率的に処理するための高度な操作が可能です。本章では、データの集約や結合を行うためのgroupby
、itertuples()
の使い方、およびconcat
、merge
、join
を用いたデータの結合方法について詳しく解説します。
groupby()
を使ったデータの集約groupby()
を使うと、特定の列の値に基づいてデータをグループ化し、統計情報を計算できます。
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
print(df.groupby('科目')['得点'].agg(['mean', 'sum', 'max']))
出力例:
mean sum max
科目
数学 85.0 255 90
英語 86.0 258 92
print(df.groupby(['名前', '科目'])['得点'].sum())
itertuples()
を使ったデータの効率的な処理itertuples()
は DataFrame
を行ごとにタプルとして取得する方法で、iterrows()
よりも高速です。
for row in df.itertuples():
print(row)
出力例:
Pandas(Index=0, 名前='Alice', 科目='数学', 得点=80)
Pandas(Index=1, 名前='Bob', 科目='数学', 得点=90)
...
for row in df.itertuples():
print(row.名前, row.得点) # 名前と得点のみ取得
DataFrame
の結合 (concat
, merge
, join
)pandas
にはデータを結合するための複数の関数があります。
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
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
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
関数 | 目的 |
---|---|
groupby() |
データをグループ化し、統計処理を行う |
itertuples() |
高速に DataFrame の行を取得する |
concat() |
縦または横にデータを結合する |
merge() |
SQL のようにキーを基に結合する |
join() |
インデックスを基にデータを結合する |
concat:
単にくっつけるイメージ、縦にも横にも結合可能、その結果細かい結合ができないmerge:
「データ」を軸に横に結合。何を軸に結合するかを意識しつつ利用。join:
「インデックス」を軸に横に結合。結合軸がインデックスで固定のため、複数をまとめ結合できるpandas
のこれらの機能を活用することで、データの集約や結合を効率的に行うことができます。