python - 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}}
解决方案
这是 的 工作pd.wide_to_long
,但您首先必须重命名某些列,即female_count
和male_count
到count_female
和count_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
推荐阅读
- mysql - 我的 Sql Bulk 插入加载数据并截断
- android - 如何使服务即使被系统杀死也无法删除?
- php - 将 ID 标签添加到 Header 标签
- c++ - C++ 删除链表中的元素
- angular - ngFor 用于延迟数据
- c# - 使用 azure search 搜索 Blob 存储文件内容
- javascript - 使用 jquery 中的值或标签文本获取 id
- spring - Spring测试配置文件:如何仅加载相关的测试上下文资源
- javascript - 无法读取未定义的属性“0” - Angular 6 和 Angular 材料 - mat-radio-group [(ngModel)] 在 *ngFor 内设置动态变量
- normalization - 图的归一化