今回は、melt()とpivot()関数を使ったPandasデータフレームのデータ値の融解と融解に焦点を当てます。
では、さっそく始めましょう。
この記事もチェック:Pandasのデータフレームに行を追加する5つの簡単な方法
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
|
この記事もチェック:Pandas DataFrameの単一カラムの名前を変更する
2. Pandasのpivot()関数を使ってデータ値を溶かす
データ変数を溶かした後は、データフレームを元の形に戻す必要があります。
そのために、Pythonはpivot()関数を用意しています。
構文は以下の通りです。
pandas.pivot(index, columns) |
- インデックス 新しいデータフレームのインデックスを持つために適用される必要があるラベルです。
- 列数: 新しいデータフレームの列を配置するために適用される必要があるラベル。
例えば、以下の様になります。
- 最初に、列を持つデータフレームを作成しました。ID、City、Fav。
- 次に、ID変数を識別子として、Expressionを変数名、Valueを非支配変数を表す列の名前として、melt()関数を使用して溶融を適用しデータフレームを伸張させる。
- 最後に、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でPandasデータフレームの列の順序を変更する4つの方法
まとめ
ここまでで、このトピックは終了です。
何か質問があれば、お気軽にコメントください。
Pythonプログラミングに関連するこのような記事のために、私たちと一緒にご期待ください。