You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas DataFrame中展开行内字典并按账号拆分多行

解决Pandas DataFrame字典列拆分多行并保留对应值的问题

我来帮你搞定这个需求!针对你这种每个列都是字典、需要拆分成多行并保留对应账号值的场景,我们可以通过几个Pandas的操作组合来实现,步骤清晰且高效。

第一步:构造示例数据(模拟你的场景)

首先我们先创建一个和你描述一致的DataFrame,甚至加入了单账号、多账号的边界情况:

import pandas as pd

data = {
    'id': [1,2,3,4],
    'column_name_1': [{'acct_nr_1': 'val1_1', 'acct_nr_2': 'val1_2'},
                      {'acct_nr_1': 'val2_1', 'acct_nr_2': 'val2_2'},
                      {'acct_nr_1': 'val3_1', 'acct_nr_2': 'val3_2', 'acct_nr_3': 'val3_3'},
                      {'acct_nr_1': 'val4_1'}],
    'column_name_2': [{'acct_nr_1': 'valA_1', 'acct_nr_2': 'valA_2'},
                      {'acct_nr_1': 'valB_1', 'acct_nr_2': 'valB_2'},
                      {'acct_nr_1': 'valC_1', 'acct_nr_2': 'valC_2', 'acct_nr_3': 'valC_3'},
                      {'acct_nr_1': 'valD_1'}],
    'column_name_3': [{'acct_nr_1': 'valX_1', 'acct_nr_2': 'valX_2'},
                      {'acct_nr_1': 'valY_1', 'acct_nr_2': 'valY_2'},
                      {'acct_nr_1': 'valZ_1', 'acct_nr_2': 'valZ_2', 'acct_nr_3': 'valZ_3'},
                      {'acct_nr_1': 'valW_1'}]
}

df = pd.DataFrame(data)

第二步:提取每行的所有账号名称

我们需要先把每一行里所有字典的账号名称提取出来,合并成一个无重复的列表:

# 遍历每行,合并所有列字典的键(账号)并去重
df['account_number'] = df.apply(
    lambda row: list(set().union(*[d.keys() for d in row[['column_name_1', 'column_name_2', 'column_name_3']]])),
    axis=1
)

第三步:将账号列表拆分为多行

用explode方法把每个账号拆成单独的行,同时保留原id和其他列的字典数据:

df_exploded = df.explode('account_number').reset_index(drop=True)

第四步:提取每个列对应账号的值

遍历所有原数据列,根据account_number取出对应字典里的数值:

# 为每个原列提取对应账号的值
for col in ['column_name_1', 'column_name_2', 'column_name_3']:
    df_exploded[col] = df_exploded.apply(
        lambda row: row[col].get(row['account_number'], None),  # 容错:如果字典没有该账号则返回None
        axis=1
    )

# 调整列顺序,让结构更符合你的需求
df_final = df_exploded[['id', 'account_number', 'column_name_1', 'column_name_2', 'column_name_3']]

特殊情况处理:如果字典是字符串格式

如果你的DataFrame里的字典其实是字符串(比如"{acct_nr_1: value}"这种形式),需要先把它转换成真正的Python字典,只需要在最开始加一步:

import ast

# 将字符串格式的字典转为Python字典
for col in ['column_name_1', 'column_name_2', 'column_name_3']:
    df[col] = df[col].apply(ast.literal_eval)

运行完上面的代码后,你就能得到完全符合预期的DataFrame啦!

内容的提问来源于stack exchange,提问作者AldanaBRZ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 21:57:36