ホームページ >バックエンド開発 >Python チュートリアル >Pandas DataFrame 列 (または複数の列) を複数の行にネスト解除する方法は?
Pandas DataFrame の列を複数の行にネスト解除する方法
Pandas でのデータ操作における課題の 1 つは、以下を含む列を処理することです。リスト。これらのリスト タイプの列を個別の行に分割する必要がある場合、そのプロセスは「ネスト解除」または「分解」と呼ばれます。
Pandas のネスト解除メソッド
方法 1: pandas.DataFrame.explode
の場合単一列の DataFrame のネストを解除するには、pandas.DataFrame.explode 関数を使用できます。引数として列名を受け取ります。
df.explode('B') # dataframe with column 'B' containing lists
メソッド 2:repeat と DataFrame コンストラクターを使用する
このメソッドは、repeat と DataFrame コンストラクターを組み合わせます。リストの長さに基づいて列の値を繰り返し、それらを連結します。
df = pd.DataFrame({'A': df.A.repeat(df.B.str.len()), 'B': np.concatenate(df.B.values)})
方法 3: リストを再作成する
list には、古い列を、列の値とその各要素を含むタプルのリストに変換することが含まれます。 list.
pd.DataFrame([[x] + [z] for x, y in df.values for z in y], columns=df.columns)
方法 4: Reindex を使用する
Reindex は、リスト内の要素のインデックスが繰り返された新しい DataFrame を作成します。その後、列には連結された要素が割り当てられます。
df.reindex(df.index.repeat(df.B.str.len())).assign(B=np.concatenate(df.B.values))
複数の列への一般化
複数の列のネストを解除するには、カスタム関数を定義できます。展開するには、DataFrame と列名のリストが必要です。
def unnesting(df, explode): idx = df.index.repeat(df[explode[0]].str.len()) df1 = pd.concat([ pd.DataFrame({x: np.concatenate(df[x].values)}) for x in explode], axis=1) df1.index = idx return df1.join(df.drop(explode, 1), how='left')
水平方向のネスト解除
水平方向にネストを解除するには、add_prefix メソッドを使用してシリーズを作成できます。新しい列の数。
df.join(pd.DataFrame(df.B.tolist(), index=df.index).add_prefix('B_'))
以上がPandas DataFrame 列 (または複数の列) を複数の行にネスト解除する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。