如何将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
相关产品推荐
相关产品推荐

