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

>>> 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/

10-12 21:57