この記事では、Pandasで行と列を入れ替える主な方法として基本的なTransposeを初めとして、関連するpivot、melt、そしてstackといったメソッドについて具体的なコード例を交えて解説します。
目次
Pandasで行と列を入れ替える方法
pandasで行と列の入れ替えは、データの形状を変更するための基本的な操作となります。この記事ではPandaswの行列入れ替えの方法としてpivot
とmelt
メソッドを中心に解説します。
基本的な行と列の入れ替え:.T属性
まずはPandasの.T
属性を用いた最も基本的な行と列の入れ替え方法について解説します。
import pandas as pd
# 元のデータ
df = pd.DataFrame({
'A': [1, 2, 3],
'B': [4, 5, 6],
'C': [7, 8, 9]
})
print("元のデータ:")
print(df)
# 行と列を入れ替え
df_transposed = df.T
print("行と列を入れ替えたデータ:")
print(df_transposed)
出力結果
元のデータ:
A B C
0 1 4 7
1 2 5 8
2 3 6 9
行と列を入れ替えたデータ:
0 1 2
A 1 2 3
B 4 5 6
C 7 8 9
pivotメソッド
次にpivot
メソッドを用いて特定の列を新しい行や列のインデックスにする方法について説明します。
import pandas as pd
# 元のデータ
df = pd.DataFrame({'A': ['foo', 'bar', 'baz'],
'B': [1, 2, 3],
'C': [2.0, 4.0, 3.0]})
print("元のデータ:")
print(df)
# pivotメソッドで行と列を入れ替え
df_pivot = df.pivot(index='A', columns='B', values='C')
print("pivot後のデータ:")
print(df_pivot)
出力結果
元のデータ:
A B C
0 foo 1 2.0
1 bar 2 4.0
2 baz 3 3.0
pivot後のデータ:
B 1 2 3
A
bar NaN 4.0 NaN
baz NaN NaN 3.0
foo 2.0 NaN NaN
meltメソッド
melt
メソッドは、選択した複数の列を一つの新しい列に縦に並べ替えます。この際、元の列名は新しいvariable
列に、その値はvalue
列に格納されます。
# 元のデータ
df = pd.DataFrame({'A': ['foo', 'bar', 'baz'],
'B': [1, 2, 3],
'C': [2.0, 4.0, 3.0]})
print("元のデータ:")
print(df)
# meltメソッドで列を縦に積み重ねる
df_melt = df.melt(id_vars=['A'], value_vars=['B', 'C'])
print("melt後のデータ:")
print(df_melt)
出力結果
元のデータ:
A B C
0 foo 1 2.0
1 bar 2 4.0
2 baz 3 3.0
melt後のデータ:
A variable value
0 foo B 1.0
1 bar B 2.0
2 baz B 3.0
3 foo C 2.0
4 bar C 4.0
5 baz C 3.0
Stackメソッド
stack
メソッドは、列を行に積み重ねる(スタックする)操作を行います。このメソッドは特に多階層のIndexを持つDataFrameにて使用すると便利です。
Stackメソッドの基本
# 元のデータ
df = pd.DataFrame({'A': ['one', 'one', 'two', 'two'],
'B': ['a', 'b', 'a', 'b'],
'C': [1, 2, 3, 4]})
print("元のデータ:")
print(df)
# Stackメソッドで列を行に積み重ねる
stacked_df = df.set_index(['A', 'B']).stack()
print("stack後のデータ:")
print(stacked_df)
出力結果
元のデータ:
A B C
0 one a 1
1 one b 2
2 two a 3
3 two b 4
stack後のデータ:
A B
one a C 1
b C 2
two a C 3
b C 4
dtype: int64
Stackメソッドで列名を行インデックスに変換する方法
stack
メソッドを使うと、列名が新たな行インデックスとして扱われます。
# 元のデータ
df = pd.DataFrame({'A': ['one', 'one', 'two', 'two'],
'B': ['a', 'b', 'a', 'b'],
'C': [1, 2, 3, 4]})
print("元のデータ:")
print(df)
# Stackメソッドで列を行に積み重ねる
stacked_df = df.set_index(['A', 'B']).stack()
print("stack後のデータ:")
print(stacked_df)
# 列名(インデックス名)を変更
stacked_df.index.names = ['New_A', 'New_B', 'New_C']
print("列名変更後のデータ:")
print(stacked_df)
出力結果
元のデータ:
A B C
0 one a 1
1 one b 2
2 two a 3
3 two b 4
stack後のデータ:
A B
one a C 1
b C 2
two a C 3
b C 4
dtype: int64
列名変更後のデータ:
New_A New_B New_C
one a C 1
b C 2
two a C 3
b C 4
dtype: int64
この記事ではPandasでの行と列の入れ替えについて、基本的な操作から応用テクニックまでを解説しました。これらの知識があなたのデータ分析作業をよりスムーズに、そして効率的に進める手助けとなれば幸いです。