ホームページ >バックエンド開発 >Python チュートリアル >Pandas DataFrame 列 (または複数の列) を複数の行にネスト解除する方法は?

Pandas DataFrame 列 (または複数の列) を複数の行にネスト解除する方法は?

DDD
DDDオリジナル
2024-12-29 00:39:11303ブラウズ

How to Unnest a Pandas DataFrame Column (or Multiple Columns) into Multiple Rows?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。