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

如何将Pandas DataFrame两列生成字典并转为新DataFrame

Pandas 按uri生成嵌套字典格式的DataFrame

原始数据

import pandas as pd

df = pd.DataFrame(
    {
        'uri': ['a', 'a', 'a', 'b','b', 'c', 'c', 'c'],
        'predicate': ['same', 'wiki' ,'wiki', 'same', 'same', 'same', 'same', 'wiki'],
        'object': ['x', 'y' ,'s', 'h', 'k', 'o', 'm', 'n'],
    }
)

目标结果

uri    result
a      {'same':['x'], 'wiki':['y', 's']}
b      {'same':['h', 'k']}
c      {'same':['o', 'm'], 'wiki':['n']}

已尝试代码

df.groupby(['uri', 'predicate'])['object'].apply(list).to_dict()

解决方案

方法1:多层分组聚合

先按uri+predicate分组将object转为列表,再按uri聚合并转成字典:

result_df = df.groupby(['uri', 'predicate'])['object'].apply(list)\
              .groupby(level='uri').agg(lambda x: x.to_dict())\
              .reset_index(name='result')

方法2:自定义分组函数

直接对uri分组,在每组内处理predicate和object的映射:

def build_result_dict(group):
    return group.groupby('predicate')['object'].apply(list).to_dict()

result_df = df.groupby('uri').apply(build_result_dict).reset_index(name='result')

两种方法都能得到目标格式的DataFrame,运行后输出:

uri                              result
0   a  {'same': ['x'], 'wiki': ['y', 's']}
1   b                {'same': ['h', 'k']}
2   c  {'same': ['o', 'm'], 'wiki': ['n']}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 01:39:32