社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

将同一个键的多个值合并到一个dict/json(熊猫、Python、数据帧)?

SteveS • 3 年前 • 1489 次点击  

我有以下数据帧:

pd.DataFrame({'id':[1,1,1,2,2], 'key': ['a', 'a', 'b', 'a', 'b'], 'value': ['kkk', 'aaa', '5', 'kkk','8']})

我想将其转换为以下数据帧:

id  value
1   {'a':['kkk', 'aaa'], 'b': 5}
2   {'a':['kkk'], 'b': 8}

我正在尝试使用 .to_dict 方法,但输出是

df.groupby(['id','key']).aggregate(list).groupby('id').aggregate(list)   

{'value':{1:['kkk',aaa'],['5']],2:['kkk'],['8']}

我应该执行dict理解,还是有一个有效的逻辑来构建这样的通用json/dict?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/129436
 
1489 次点击  
文章 [ 1 ]  |  最新文章 3 年前
richardec
Reply   •   1 楼
richardec    3 年前

你先 groupby(['id', 'key']) agg(list) ,可以按索引的第一级进行分组,对于每组,使用 droplevel + to_dict :

new_df = df.groupby(['id', 'key']).agg(list).groupby(level=0).apply(lambda x: x['value'].droplevel(0).to_dict()).reset_index(name='value')

输出:

>>> new_df
   id                              value
0   1  {'a': ['kkk', 'aaa'], 'b': ['5']}
1   2         {'a': ['kkk'], 'b': ['8']}

或者更简单一点:

new_df = df.groupby('id').apply(lambda x: x.groupby('key')['value'].agg(list).to_dict())