パンダ: 同じ名前を共有する列をマージする方法


次の基本構文を使用して、同じ列名を共有する pandas DataFrame 内の列を結合できます。

 #define function to merge columns with same names together
def same_merge (x): return ' , '. join (x[ x.notnull ()]. astype (str))

#define new DataFrame that merges columns with same names together
df_new = df. groupby (level= 0 , axis= 1 ). apply ( lambda x: x.apply (same_merge,axis= 1 ))

次の例は、この構文を実際に使用する方法を示しています。

例: Pandas で同じ名前を共有する列を結合する

次のパンダ データフレームがあるとします。

 import pandas as pd
import numpy as np

#createDataFrame
df = pd. DataFrame ({' A ': [5, 6, 8, np.nan, 4, np.nan, np.nan],
                   ' A1 ': [np.nan, 12, np.nan, 10, np.nan, 6, 4],
                   ' B ': [2, 7, np.nan, np.nan, 2, 4, np.nan],
                   ' B1 ': [5, np.nan, 6, 15, 1, np.nan, 4]})

#rename columns so there are duplicate column names
df. columns = [' A ', ' A ', ' B ', ' B ']

#view DataFrame
print (df)

     AABB
0 5.0 NaN 2.0 5.0
1 6.0 12.0 7.0 NaN
2 8.0 NaN NaN 6.0
3 NaN 10.0 NaN 15.0
4 4.0 NaN 2.0 1.0
5 NaN 6.0 4.0 NaN
6 NaN 4.0 NaN 4.0

2 つの列の名前が「A」、2 つの列の名前が「B」であることに注意してください。

次のコードを使用すると、同じ列名を持つ列をマージし、それらの値をカンマで連結できます。

 #define function to merge columns with same names together
def same_merge (x): return ' , '. join (x[ x.notnull ()]. astype (str))

#define new DataFrame that merges columns with same names together
df_new = df. groupby (level= 0 , axis= 1 ). apply ( lambda x: x.apply (same_merge,axis= 1 ))

#view new DataFrame
print (df_new)

          AB
0 5.0 2.0,5.0
1 6.0,12.0 7.0
2 8.0 6.0
3 10.0 15.0
4 4.0 2.0,1.0
5 6.0 4.0
6 4.0 4.0

新しい DataFrame は、同じ名前の列をマージし、それらの値をカンマで連結しました。

別の区切り文字を使用したい場合は、 same_merge()関数内のカンマ区切り文字を別のものに置き換えるだけです。

たとえば、次のコードは、代わりにセミコロン区切り文字を使用する方法を示しています。

 #define function to merge columns with same names together
def same_merge (x): return ' ; '. join (x[ x.notnull ()]. astype (str))

#define new DataFrame that merges columns with same names together
df_new = df. groupby (level= 0 , axis= 1 ). apply ( lambda x: x.apply (same_merge,axis= 1 ))

#view new DataFrame
print (df_new)

          AB
0 5.0 2.0;5.0
1 6.0;12.0 7.0
2 8.0 6.0
3 10.0 15.0
4 4.0 2.0;1.0
5 6.0 4.0
6 4.0 4.0

新しい DataFrame は、同じ名前の列をマージし、それらの値をセミコロンで連結しました。

追加リソース

次のチュートリアルでは、パンダで他の一般的な操作を実行する方法を説明します。

Pandasで重複した列を削除する方法
Pandas ですべての列名をリストする方法
Pandas で列を名前で並べ替える方法

コメントを追加する

メールアドレスが公開されることはありません。 が付いている欄は必須項目です