ホームページ > バックエンド開発 > Python チュートリアル > Pandas DataFrame を効率的にメルトおよびアンメルトするにはどうすればよいですか?

Pandas DataFrame を効率的にメルトおよびアンメルトするにはどうすればよいですか?

Linda Hamilton
リリース: 2024-12-20 09:48:10
オリジナル
590 人が閲覧しました

How Can I Efficiently Melt and Unmelt Pandas DataFrames?

Pandas データフレームの溶解

はじめに

Pandas では、データフレームの溶解には、データをワイド形式からロング形式に転置することが含まれます。形式なので、さまざまなデータ操作タスクに役立ちます。この記事では、データフレームを融解するプロセスをガイドし、実際の例を使用してさまざまなシナリオを検討します。

問題 1: 列データの転置

目的: 元の列を繰り返しながら、列を行に入れ替えますnames.

解決策:

df.melt(id_vars=['Name', 'Age'], var_name='Subject', value_name='Grades')
ログイン後にコピー

このコードは、「Subject」列と「Grades」列を含む新しいデータフレームを作成しますが、元の列名は繰り返されます。それぞれにrow.

例:

df = pd.DataFrame({'Name': ['Bob', 'John', 'Foo', 'Bar', 'Alex', 'Tom'],
                   'Math': ['A+', 'B', 'A', 'F', 'D', 'C'],
                   'English': ['C', 'B', 'B', 'A+', 'F', 'A'],
                   'Age': [13, 16, 16, 15, 15, 13]})

melted_df = df.melt(id_vars=['Name', 'Age'], var_name='Subject', value_name='Grades')

print(melted_df)
ログイン後にコピー

出力:

   Name  Age Subject Grades
0   Bob   13  English     C
1  John   16  English     B
...
11  Tom   13     Math     C
ログイン後にコピー

問題 2: フィルタリング列

目的: 特定の列を溶かし、他の列を除外します。

解決策:

df.melt(id_vars=['Name', 'Age'], value_vars='Math', var_name='Subject', value_name='Grades')
ログイン後にコピー

この中でたとえば、「数学」列のみが溶解され、「年齢」と「名前」は溶解されます。

例:

melted_df = df.melt(id_vars=['Name', 'Age'], value_vars='Math', var_name='Subject', value_name='Grades')

print(melted_df)
ログイン後にコピー

出力:

   Name  Age Subject Grades
0   Bob   13    Math    A+
1  John   16    Math     B
...
ログイン後にコピー

問題 3:グループ化と順序付けが融合したデータ

目的: 溶けたデータをグループ化し、値で並べ替えます。

解決策:

melted_df.groupby('value', as_index=False).agg({
    'Subject': ', '.join,
    'Grades': ', '.join
}).sort_values('value', ascending=True)
ログイン後にコピー

このコードは、溶けたデータをスコアごとにグループ化し、「Subject」と「Grades」の値を結合します。 commas.

例:

grouped_df = melted_df.groupby('value', as_index=False).agg({
    'Subject': ', '.join,
    'Grades': ', '.join
}).sort_values('value', ascending=True)

print(grouped_df)
ログイン後にコピー

出力:

  value             Name                Subjects
0     A         Foo, Tom           Math, English
1    A+         Bob, Bar           Math, English
2     B  John, John, Foo  Math, English, English
...
ログイン後にコピー

問題 4: 溶けていないデータフレーム

目的: 溶解プロセスを逆にして、元の形式に戻します。

解決策:

melted_df.pivot_table("Grades", ['Name', 'Age'], 'Subject', aggfunc='first').reset_index()
ログイン後にコピー

このコードは、溶けたデータフレームをピボットして元の幅に戻します。 format.

例:

unmelted_df = melted_df.pivot_table("Grades", ['Name', 'Age'], 'Subject', aggfunc='first').reset_index()

print(unmelted_df)
ログイン後にコピー

出力:

   Name  Age Math English
0   Alex   15    D       F
1   Bar   15    F      A+
2   Bob   13   A+       C
3   Foo   16    A       B
...
ログイン後にコピー

問題 5: グループ化と組み合わせる列

目的: 特定の列でデータをグループ化し、他の列をカンマで結合します。

解決策:

melted_df.groupby('Name', as_index=False).agg(
    Subjects=', '.join,
    Grades=', '.join
)
ログイン後にコピー

このコードはデータを「名前」でグループ化し、「件名」と「件名」を結合します。 '成績' カンマ付き。

例:

grouped_df = melted_df.groupby('Name', as_index=False).agg(
    Subjects=', '.join,
    Grades=', '.join
)

print(grouped_df)
ログイン後にコピー

出力:

   Name        Subjects Grades
0  Alex  Math, English   D, F
1   Bar  Math, English  F, A+
2   Bob  Math, English  A+, C
...
ログイン後にコピー

問題6: 全てを溶かす列

目的: 識別子を含むすべての列を行に変換します。

解決策:

df.melt(var_name='Column', value_name='Value')
ログイン後にコピー

このコードは、すべての列を行に溶かし、すべてのデータを次のように扱います。値。

例:

melted_df = df.melt(var_name='Column', value_name='Value')

print(melted_df)
ログイン後にコピー

出力:

    Column Value
0       Age    16
1       Age    16
2       Age    15
...
11  English     C
12     Math     A
13     Math    A+
ログイン後にコピー

以上がPandas DataFrame を効率的にメルトおよびアンメルトするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート