【Pandas】Python Pandas基礎編(DataFrame結合 concat, merge, join)
こんにちは
Pandasを用いたデータフレームの結合(縦方向・横方向)についてです!
始める前に
まずはpandasをインポートしましょう
import pandas as pd
横方向
例として用いるデータフレーム
import numpy as np
data1 = np.array([["2020-01-01",5]
,["2020-01-02",3]
,["2020-01-03",4]
,["2020-01-04",2]
,["2020-01-05",2]
,["2020-01-06",5]
,["2020-01-07",5]
,["2020-01-08",4]
,["2020-01-09",4]
,["2020-01-10",4]])
df1 = pd.DataFrame(data1, columns=["Time", "Tokyo"])
data2= np.array([["2020-01-01",-1]
,["2020-01-02",-4]
,["2020-01-03",-4]
,["2020-01-04",-2]
,["2020-01-05",-2]
,["2020-01-06",-5]
,["2020-01-07",-5]
,["2020-01-08",-4]
,["2020-01-09",-4]
,["2020-01-10",-4]])
df2 = pd.DataFrame(data2,columns=["Time", "Nagano"])
pd.concat()
pd.concat()は縦軸(axis=0)または横軸(axis=1)を軸として複数のデータフレームを結合できます。
df3 = pd.concat([df1, df2], axis=1, keys="TN")
df3
※keysで複数のデータフレームの頭文字を付けることができる。例えば、3つのデータフレームのTokyo、Nagano、Okinawaを結合するとしたら、keys="TNO"とできる。
Tokyoのみを取り出したいときは、以下のようにします。
df3["T"]
pandas.concat — pandas 1.2.0 documentation
.join()
.join()はindexを軸として、2つのデータフレームを結合できます。
同じカラムを区別して結合できます。
df3 = df1.join(df2, lsuffix="_Tokyo", rsuffix="_Nagano")
df3
l※suffixは左側の重複カラムにラベルを付け、rsuffixは右側。
pandas.DataFrame.join — pandas 1.2.0 documentation
pd.merge()
pd.merge()はindexまたはcolumnを軸として2つのデータフレームを結合できます。
同じカラムは結合されます。今回は「Time」が結合されました。
df3 = pd.merge(df1, df2)
df3
pandas.merge — pandas 1.2.0 documentation
縦方向
例として用いるデータフレーム
import numpy as np
data_a = np.array([["2020-01-01",5]
,["2020-01-02",3]
,["2020-01-03",4]
,["2020-01-04",2]
,["2020-01-05",2]])
df_a = pd.DataFrame(data_a,columns=["Time", "Tokyo"])
data_b = np.array([["2020-01-06",5]
,["2020-01-07",3]
,["2020-01-08",4]
,["2020-01-09",2]
,["2020-01-10",2]])
df_b = pd.DataFrame(data_b,columns=["Time", "Tokyo"])
pd.concat()
縦方向の結合にはpd.concat()が多用されます。
pd.concat()は縦軸(axis=0)または横軸(axis=1)を軸として複数のデータフレームを結合できます。
同じカラムは結合されます。
df_c = pd.concat([df_a, df_b], ignore_index=True)
df_c
※ignore_index=Trueでインデックスを振りなおし
pandas.concat — pandas 1.2.0 documentation
.append()
.append()は2つのデータフレームあるいはシリーズを縦方向に結合できます。
df_c = df_a.append(df_b).reset_index(drop=True)
df_c
※①df_a.append(df_b)
②.reset_index(drop=True)
pandas.Series.append — pandas 1.2.0 documentation
pandas.DataFrame.append — pandas 1.2.0 documentation
それでは
参考文献
最終更新日
2021/1/6