【问题标题】:How to unpivot pandas dataframe如何取消pandas数据框
【发布时间】:2021-11-06 04:51:26
【问题描述】:

我有一个 Pandas 数据框,如下所示: 起始表:

Kode Country Procedure male male female female
Kode Country Procedure two-year-old three-year-old two-year-old three-year-old
1a US proc_1 4 6 3 6
1a UK proc_1 2 3 5 1
1b US proc_2 15 3 5 2
1b UK proc_2 8 4 7 3

CSV:

Code;Country;Procedure;male;male;female;female
Code;Country;Procedure;two-year-old;three-year-old;two-year-old;three-year-old
1a;US;proc_1;4;6;3;6
1a;UK;proc_1;2;3;5;1
1b;US;proc_2;15;3;5;2
1b;UK;proc_2;8;4;7;3

我的python代码:

df = pd.read_csv('test.csv', 
                 header=[0,1],delimiter= ';',
                 engine='python', 
                 encoding= 'unicode_escape')

事实上我有两个行标题 如何旋转 pandas 数据框以获得以下结果?

结果表:

Code Country Procedure Gender Age Frequency
1a US proc_1 male two-year-old 4
1a US proc_1 male three-year-old 6
1a US proc_1 female two-year-old 3
1a US proc_1 female three-year-old 6
1a UK proc_1 male two-year-old 2
1a UK proc_1 male three-year-old 3
1a UK proc_1 female two-year-old 5
1a UK proc_1 female three-year-old 1
1b ...

【问题讨论】:

标签: python pandas dataframe pivot


【解决方案1】:

您可能想要go with melt,这与枢轴相反

  • 我们指定标识符变量:前三列
  • 其余列成为值变量,我们为它们分配名称,并为新值列命名
import io
import pandas as pd

piv = pd.read_csv(io.StringIO("""Code;Country;Procedure;male;male;female;female
Code;Country;Procedure;two-year-old;three-year-old;two-year-old;three-year-old
1a;US;proc_1;4;6;3;6
1a;UK;proc_1;2;3;5;1
1b;US;proc_2;15;3;5;2
1b;UK;proc_2;8;4;7;3"""), header=[0, 1], delimiter=";")


unpivoted = piv.melt(id_vars=list(piv.columns[:3]),
                     var_name=['gender', 'age'],
                     value_name='frequency')

# cleanup the tupleized columns
unpivoted.columns = [(col[0] if isinstance(col, tuple) else col)
                     for col in unpivoted.columns]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-11
    • 1970-01-01
    • 2019-07-22
    • 1970-01-01
    • 2021-11-22
    • 1970-01-01
    • 2022-06-13
    • 1970-01-01
    相关资源
    最近更新 更多