Pandasで行列の入れ替えを行う方法:pivot、melt、stackについて解説

  • 2023年9月2日
  • 2023年9月3日
  • Python
  • 659回
  • 0件

この記事では、Pandasで行と列を入れ替える主な方法として基本的なTransposeを初めとして、関連するpivot、melt、そしてstackといったメソッドについて具体的なコード例を交えて解説します。

Pandasで行と列を入れ替える方法

pandasで行と列の入れ替えは、データの形状を変更するための基本的な操作となります。この記事ではPandaswの行列入れ替えの方法としてpivotmeltメソッドを中心に解説します。

基本的な行と列の入れ替え:.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での行と列の入れ替えについて、基本的な操作から応用テクニックまでを解説しました。これらの知識があなたのデータ分析作業をよりスムーズに、そして効率的に進める手助けとなれば幸いです。

最新情報をチェックしよう!