Pandasのmelt()とpivot()関数を使ってデータの整形をする方法

スポンサーリンク

今回は、melt()とpivot()関数を使ったPandasデータフレームのデータ値の融解と融解に焦点を当てます。

では、さっそく始めましょう。

スポンサーリンク

Pandasでデータを溶かす・溶かさない – Crisp Overview

データを溶かす、溶かさないの概念を深く掘り下げる前に、この魅力的な言葉 – ICE CREAM – に注目してみてください。

そうです!アイスクリームです!お皿に乗せて、最初の一口を食べようとした時に電話がかかってきたら。

アイスクリームが溶けて、ミルクセーキになるのは明らかです。

同じように、今度はデータフレーム内のデータ値を溶かすという概念を考えてみましょう。

データ値の溶融は、データ値をより広いフォーマットからより狭く長いフォーマットへと構成し、変更するために使用されます。

溶融の基本的な目的は、1つまたは複数のデータ列がデータ属性の識別子の役割を果たす、特定の形式のデータフレームを作成することです。

このシナリオでは、残りのデータ変数は実際にはデータ値とみなされ、次の2つの列だけが存在する::変数と値。

一方、データ変数に対してUmeltingを行い、値を元のフォーマットに戻す。

データのMeltingとUnmeltingを理解した上で、同じことを実現するPandasの関数を理解しましょう。

1. Pandasでデータ変数をMeltingする

データ変数に対してMeltingを行うために、Python Pandasモジュールはmelt()関数を提供しています。

構文は以下の通りです。

pandas.melt(frame, id_vars=None, value_vars=None,
 var_name=None, value_name='value')
  • frame: メルトされるデータフレーム。
  • id_vars: 識別子となるカラム名。
  • value_vars: 値に成形されるすべての変数名。値に成形されるすべての変数名(識別子の変数以外)。
  • value_name: カラムの値の名前、デフォルトはvalue。

例えば、以下の様になります。

例: この例では、変数でデータフレームを作成しました。

例:この例では、DataFrame() 関数を使用して、City、ID、および Fav という変数を持つデータフレームを作成しました。

さらに、データフレーム全体を melt() 関数に渡し、ID を識別子変数として、City と Fav を値変数として渡します。

import pandas as pd
 
data = {"City": ["Pune", "Satara", "Solapur"], "ID": [1, 2, 3], "Fav": ["1", "3", "10"]}
 
dataf = pd.DataFrame(data)
print("Before melting..")
print(dataf)
 
melt_df = pd.melt(dataf, id_vars=["ID"], value_vars=["City", "Fav"])
print("After melting..")
print(melt_df)

を出力します。

その結果、データポストmeltingは3列のみとなりました。

ID (識別子変数)、変数、値です。

このようにして、データフレームをワイドフォーマットからロングフォーマットに変更します。

Before melting..
      City  ID Fav
0     Pune   1   1
1   Satara   2   3
2  Solapur   3  10
After melting..
   ID variable    value
0   1     City     Pune
1   2     City   Satara
2   3     City  Solapur
3   1      Fav        1
4   2      Fav        3
5   3      Fav       10

また、melt()関数に渡す際に、元のデータフレームから列をスキップして、特定の列を除外することもできます。

import pandas as pd
 
data = {"City": ["Pune", "Satara", "Solapur"], "ID": [1, 2, 3], "Fav": ["1", "3", "10"]}
 
dataf = pd.DataFrame(data)
print("Before melting..")
print(dataf)
 
melt_df = pd.melt(dataf, id_vars=["City"], value_vars=["Fav"])
print("After melting..")
print(melt_df)

結果は以下の通りです。

ここでは、変数 ID を除外しているため、データ変数をメルトする際に考慮されることはありません。

Before melting..
      City  ID Fav
0     Pune   1   1
1   Satara   2   3
2  Solapur   3  10
After melting..
      City variable value
0     Pune      Fav     1
1   Satara      Fav     3
2  Solapur      Fav    10

2. Pandasのpivot()関数を使ってデータ値を溶かす

データ変数を溶かした後は、データフレームを元の形に戻す必要があります。

そのために、Pythonはpivot()関数を用意しています。

構文は以下の通りです。

pandas.pivot(index, columns)
  • インデックス 新しいデータフレームのインデックスを持つために適用される必要があるラベルです。
  • 列数: 新しいデータフレームの列を配置するために適用される必要があるラベル。

例えば、以下の様になります。

  1. 最初に、列を持つデータフレームを作成しました。ID、City、Fav。
  2. 次に、ID変数を識別子として、Expressionを変数名、Valueを非支配変数を表す列の名前として、melt()関数を使用して溶融を適用しデータフレームを伸張させる。
  3. 最後に、pivot() 関数を使用してデータの融合を解除し、ID を新しいデータフレームのインデックスセットとして提供します。
import pandas as pd
 
data = {"City": ["Pune", "Satara", "Solapur"], "ID": [1, 2, 3], "Fav": ["1", "3", "10"]}
 
dataf = pd.DataFrame(data)
print("Before melting..")
print(dataf)
 
melt_df = pd.melt(dataf, id_vars=["ID"], value_vars=["City","Fav"], var_name="Expression", value_name="Value")
print("After melting..")
print(melt_df)
 
unmelt = melt_df.pivot(index='ID', columns='Expression')
print("Post unmelting..")
print(unmelt)

結果は以下の通りです。

Before melting..
      City  ID Fav
0     Pune   1   1
1   Satara   2   3
2  Solapur   3  10
After melting..
   ID Expression    Value
0   1       City     Pune
1   2       City   Satara
2   3       City  Solapur
3   1        Fav        1
4   2        Fav        3
5   3        Fav       10
Post unmelting..
              Value   
Expression     City Fav
ID
1              Pune   1
2            Satara   3
3           Solapur  10

まとめ

ここまでで、このトピックは終了です。

何か質問があれば、お気軽にコメントください。

Pythonプログラミングに関連するこのような記事のために、私たちと一緒にご期待ください。

タイトルとURLをコピーしました