Pandas: 複数の列の値を 1 つにマージする方法
次のメソッドを使用して、pandas DataFrame の複数の列の値を 1 つの列にグループ化できます。
方法 1: デフォルトの列順序で値を結合する
df[' coalesce '] = df. bfill (axis= 1 ). iloc [:, 0]
方法 2: 特定の列順序を使用して値を結合する
df[' coalesce '] = df[[' col3 ', ' col1 ', ' col2 ']]. bfill (axis= 1 ). iloc [:, 0]
次の例は、次の pandas DataFrame で各メソッドを実際に使用する方法を示しています。
import pandas as pd import numpy as np #createDataFrame df = pd. DataFrame ({' points ': [np.nan, np.nan, 19, np.nan, 14], ' assists ': [np.nan, 7, 7, 9, np.nan], ' rebounds ': [3, 4, np.nan, np.nan, 6]}) #view DataFrame print (df) points assists rebounds 0 NaN NaN 3.0 1 NaN 7.0 4.0 2 19.0 7.0 NaN 3 NaN 9.0 NaN 4 14.0 NaN 6.0
方法 1: デフォルトの列順序で値を結合する
次のコードは、3 つの列の最初のゼロ以外の値を結合された値として使用して、ポイント、アシスト、およびリバウンドの列の値を 1 つの列に結合する方法を示しています。
#create new column that contains first non-null value from three existing columns
df[' coalesce '] = df. bfill (axis= 1 ). iloc [:, 0]
#view updated DataFrame
print (df)
points assists rebounds coalesce
0 NaN NaN 3.0 3.0
1 NaN 7.0 4.0 7.0
2 19.0 7.0 NaN 19.0
3 NaN 9.0 NaN 9.0
4 14.0 NaN 6.0 14.0
マージ列の値がどのように選択されるかは次のとおりです。
- 1 行目: 最初のゼロ以外の値は3.0でした。
- 2 行目: 最初のゼロ以外の値は7.0でした。
- 3 行目: 最初のゼロ以外の値は19.0でした。
- 4 行目: 最初のゼロ以外の値は9.0でした。
- 5 行目: 最初のゼロ以外の値は14.0でした。
方法 2:特定の列順序を使用して値を結合する
次のコードは、アシスト、リバウンド、ポイントの順序で列を分析することにより、3 つの列の値をマージする方法を示しています。
#coalesce values in specific column order
df[' coalesce '] = df[[' assists ', ' rebounds ', ' points ']]. bfill (axis= 1 ). iloc [:, 0]
#view updated DataFrame
print (df)
points assists rebounds coalesce
0 NaN NaN 3.0 3.0
1 NaN 7.0 4.0 7.0
2 19.0 7.0 NaN 7.0
3 NaN 9.0 NaN 9.0
4 14.0 NaN 6.0 6.0
マージ列にどの値を配置するかを決定するために使用されるロジックは次のとおりです。
- ヘルパー列の値がゼロでない場合は、その値を使用します。
- それ以外の場合、バウンス列の値がゼロでない場合は、その値を使用します。
- それ以外の場合、ポイント列の値がゼロでない場合は、その値を使用します。
注: bfill()関数の完全なドキュメントはここで見つけることができます。
追加リソース
次のチュートリアルでは、パンダで他の一般的な操作を実行する方法を説明します。
Pandas で 2 つの列を結合する方法
Pandas で特定の列を合計する方法
Pandas で複数の列で並べ替える方法