gpt4 book ai didi

python - Pandas 将列分组为级别

转载 作者:行者123 更新时间:2023-11-28 17:29:36 24 4
gpt4 key购买 nike

假设我有一个以下形式的数据框:

>>> df = pd.DataFrame([['2012', 'A', 1], ['2012', 'B', 2], ['2011', 'A', 3], 
['2011', 'B', 2]],
columns=['branch_year', 'branch_name', 'employee_id'])

branch_year branch_name employee_id
0 2012 A 1
1 2012 B 2
2 2011 A 3
3 2011 B 2

我如何合并列 branch_yearbranch_name 以便它们具有父列 branch - 理想情况下重命名它们以摆脱branch_ 前缀。

       branch      branch  employee_id
year name
0 2012 A 1
1 2012 B 2
2 2011 A 3
3 2011 B 2

最终目标是创建以下形式的字典列表:

[
{
"employeed_id": 1,
"branch": {
"name": "A",
"year": "2012"
}
},
{...}
]

最佳答案

您可以对每一行应用一个函数并将结果转换为列表:

def to_nested_dict(row):
return {'employee_id': row.employee_id,
'branch': {'year': row.branch_year, 'name': row.branch_name}}

list(df.apply(to_nested_dict, axis=1))

这保留了行的原始顺序:

[{'branch': {'name': 'A', 'year': '2012'}, 'employee_id': 1},
{'branch': {'name': 'B', 'year': '2012'}, 'employee_id': 2},
{'branch': {'name': 'A', 'year': '2011'}, 'employee_id': 3},
{'branch': {'name': 'B', 'year': '2011'}, 'employee_id': 2}]

嵌套在带有下划线的列名上的编程方法:

def to_nested_dict(row):
res = {}
for col in row.index:
outer_key, inner_key = col.split('_')
outer = res.setdefault(outer_key, {})
outer[inner_key] = row[col]
return res

list(df.apply(to_nested_dict, axis=1))

结果:

[{'branch': {'name': 'A', 'year': '2012'}, 'employee': {'id': 1}},
{'branch': {'name': 'B', 'year': '2012'}, 'employee': {'id': 2}},
{'branch': {'name': 'A', 'year': '2011'}, 'employee': {'id': 3}},
{'branch': {'name': 'B', 'year': '2011'}, 'employee': {'id': 2}}]

关于python - Pandas 将列分组为级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35413776/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com