ホームページ > バックエンド開発 > Python チュートリアル > Pandas DataFrame を溶かす方法とこの手法をいつ使用するか?

Pandas DataFrame を溶かす方法とこの手法をいつ使用するか?

Barbara Streisand
リリース: 2024-12-29 00:52:11
オリジナル
455 人が閲覧しました

How to Melt a Pandas DataFrame and When to Use This Technique?

Pandas DataFrame の溶解

Melt とは?

pandas DataFrame の溶解には、各列が変数を表すワイド形式からの再構築が含まれます。長い形式に変換します。各行は観測値を表し、各列は特徴量を表します。

DataFrame をメルトする方法

DataFrame をメルトするには、次の引数を指定して pd.melt() 関数を使用します。

  • id_vars: 列一意の識別子 (通常は主キーまたは
  • value_vars: 溶かされる (行に変換される) 列。指定しない場合、id_vars にないすべての列が溶解されます。
  • var_name: 元の列名を含む列の名前。
  • value_name: 元の列を含む列の名前。

たとえば、以下を溶かすにはDataFrame:

import pandas as pd

df = pd.DataFrame({'Name': ['Bob', 'John', 'Foo', 'Bar', 'Alex', 'Tom'],
                   'Math': ['A+', 'B', 'A', 'F', 'D', 'C'],
                   'English': ['C', 'B', 'B', 'A+', 'F', 'A']})
ログイン後にコピー

次を使用できます:

df_melted = pd.melt(df, id_vars=['Name'], value_vars=['Math', 'English'])
ログイン後にコピー

これにより、溶解された DataFrame が出力されます:

   Name  variable  value
0   Bob    Math     A+
1   John    Math      B
2   Foo    Math      A
3   Bar    Math      F
4   Alex    Math      D
5   Tom    Math      C
6   Bob  English      C
7   John  English      B
8   Foo   English      B
9   Bar  English     A+
10  Alex  English      F
11  Tom   English      A
ログイン後にコピー

Melt を使用する場合

メルティングは、次のような場合に役立ちます。

  • ワイド データを変換するプロットや視覚化に適した形式に変換します。
  • 特定のデータ形式を必要とする機械学習モデル用のデータを準備します。
  • 観測値を一意の識別子でグループ化し、溶けたデータに対して集計または変換を実行します。

シナリオ例

問題1: 以下の DataFrame を、列名、年齢、件名、および学年を含むメルト形式に変換します。

df = pd.DataFrame({'Name': ['Bob', 'John', 'Foo', 'Bar', 'Alex', 'Tom'],
                   'Math': ['A+', 'B', 'A', 'F', 'D', 'C'],
                   'English': ['C', 'B', 'B', 'A+', 'F', 'A']})
ログイン後にコピー
df_melted = pd.melt(df, id_vars=['Name', 'Age'], var_name='Subject', value_name='Grade')

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

出力:

   Name  Age Subject Grade
0   Bob   13  English      C
1  John   16  English      B
2   Foo   16  English      B
3   Bar   15  English     A+
4  Alex   17  English      F
5   Tom   12  English      A
6   Bob   13     Math     A+
7  John   16     Math      B
8   Foo   16     Math      A
9   Bar   15     Math      F
10 Alex   17     Math      D
11  Tom   12     Math      C
ログイン後にコピー

問題 2: 問題 1 からの溶けた DataFrame をフィルターして、数学のみを含めます。 columns.

df_melted_math = pd.melt(df, id_vars=['Name', 'Age'], value_vars=['Math'], var_name='Subject', value_name='Grade')

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

出力:

   Name  Age Subject Grade
0   Bob   13    Math     A+
1  John   16    Math      B
2   Foo   16    Math      A
3   Bar   15    Math      F
4  Alex   17    Math      D
5   Tom   12    Math      C
ログイン後にコピー

問題 3: 溶けた DataFrame をグレードごとにグループ化し、それぞれの一意の名前と主題を計算します。 Grade.

df_melted_grouped = df_melted.groupby(['Grade']).agg({'Name': ', '.join, 'Subject': ', '.join}).reset_index()

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

出力:

  Grade             Name                Subjects
0     A       Foo, Tom           Math, English
1    A+         Bob, Bar           Math, English
2     B  John, John, Foo  Math, English, English
3     C         Bob, Tom           English, Math
4     D             Alex                    Math
5     F        Bar, Alex           Math, English
ログイン後にコピー

問題 4: 問題 1 で溶けた DataFrame を元に戻します。 format.

df_unmelted = df_melted.pivot_table(index=['Name', 'Age'], columns='Subject', values='Grade', aggfunc='first').reset_index()

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

出力:

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

問題 5: 問題 1 の溶けた DataFrame を名前でグループ化し、科目と成績を次の条件で区切ります。 commas.

df_melted_by_name = df_melted.groupby('Name').agg({'Subject': ', '.join, 'Grade': ', '.join}).reset_index()

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

出力:

   Name        Subject Grades
0  Alex  Math, English   D, F
1   Bar  Math, English  F, A+
2   Bob  Math, English  A+, C
3   Foo  Math, English   A, B
4  John  Math, English   B, B
5   Tom  Math, English   C, A
ログイン後にコピー

問題 6: DataFrame 全体を 1 つの値の列に溶かし、別の列に元の列名を含めます。 .

df_melted_full = df.melt(ignore_index=False)

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

出力:

   Name  Age  variable  value
0   Bob   13    Math     A+
1  John   16    Math      B
2   Foo   16    Math      A
3   Bar   15    Math      F
4  Alex   17    Math      D
5   Tom   12    Math      C
6   Bob   13  English      C
7  John   16  English      B
8   Foo   16  English      B
9   Bar   15  English     A+
10 Alex   17  English      F
11  Tom   12  English      A
ログイン後にコピー

以上がPandas DataFrame を溶かす方法とこの手法をいつ使用するか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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