首页 > 解决方案 > Pandas 将多个相关列组合成单独的组

问题描述

我有一个看起来像这样的熊猫数据框:

在此处输入图像描述

我想把它转换成这种格式:

在此处输入图像描述

在 Pandas 中执行此操作的合适技术是什么?

要在第一张图像中生成原始数据框,您可以使用以下数据。使用此数据生成数据框

import pandas as pd
df=pd.DataFrame.from_dict(data_dict)


data_dict = {'female_count': {0: 65.0, 1: 13.0, 2: 51.0, 3: 19.0, 4: 53.0, 5: 146.0},
 'jobTitle': {0: 'Associate',
              1: 'Intern',
              2: 'Key Holder',
              3: 'Retail Store Manager',
              4: 'Seasonal Sales Associate',
              5: 'other_jobTitles'},
 'male_count': {0: 44.0, 1: 17.0, 2: 32.0, 3: 6.0, 4: 26.0, 5: 125.0},
 'mean_z_score_female': {0: 0.0,
                         1: 0.0,
                         2: -0.352017669928334,
                         3: 0.08210979257229986,
                         4: -0.10918109741978921,
                         5: 0.23156942728286573},
 'mean_z_score_male': {0: -0.04759213253110343,
                       1: 0.0,
                       2: -0.28872649090170965,
                       3: -0.0027563646918771063,
                       4: 0.0,
                       5: 0.6133138806146933}}

标签: pythonpandas

解决方案


这是 的 工作pd.wide_to_long,但您首先必须重命名某些列,即female_countmale_countcount_femalecount_male

df.columns = ["_".join(entry.split("_")[::-1]) 
          if "count" in entry else entry 
          for entry in df]
          ]

print(df.columns)
Index(['count_female', 'jobTitle', 'count_male', 'mean_z_score_female',
   'mean_z_score_male'],
  dtype='object')

print (pd.wide_to_long(df, stubnames=["count","mean_z_score"],
                       i="jobTitle",j="gender", sep="_", suffix="\w+"))

                                 count  mean_z_score
jobTitle                 gender                     
Associate                female   65.0      0.000000
Intern                   female   13.0      0.000000
Key Holder               female   51.0     -0.352018
Retail Store Manager     female   19.0      0.082110
Seasonal Sales Associate female   53.0     -0.109181
other_jobTitles          female  146.0      0.231569
Associate                male     44.0     -0.047592
Intern                   male     17.0      0.000000
Key Holder               male     32.0     -0.288726
Retail Store Manager     male      6.0     -0.002756
Seasonal Sales Associate male     26.0      0.000000
other_jobTitles          male    125.0      0.613314

推荐阅读