在pandas dataframe中groupby之后将多个列合并转换为dict

文章展示了如何使用Pandas库对数据帧进行分组操作,将特定列转换为字典列表。通过`groupby`函数结合`apply`或`agg`,可以实现按列a和b分组,将c和d列的数据转换为字典格式并存储为列表。
摘要由CSDN通过智能技术生成

我有一个数据帧

df = pd.DataFrame({"a":[1,1,1,2,2,2,3,3], "b":["a","a","a","b","b","b","c","c"], "c":[0,0,1,0,1,1,0,1], "d":["x","y","z","x","y","y","z","x"]})


    a   b   c   d
0   1   a   0   x
1   1   a   0   y
2   1   a   1   z
3   2   b   0   x
4   2   b   1   y
5   2   b   1   y
6   3   c   0   z
7   3   c   1   x

我想对a列和b列进行分组,以获得以下输出:

    a   b   e
0   1   a   [{'c': 0, 'd': 'x'}, {'c': 0, 'd': 'y'}, {'c': 1, 'd': 'z'}]
1   2   b   [{'c': 0, 'd': 'x'}, {'c': 1, 'd': 'y'}, {'c': 1, 'd': 'y'}]
2   3   c   [{'c': 0, 'd': 'z'}, {'c': 1, 'd': 'x'}]

 解决方案:

new=ddf.groupby(['a','b'])[['c','d']].apply(lambda x : x.to_dict('records')).to_frame('e').reset_index()
Out[13]: 
   a  b                                                  e
0  1  a  [{'c': 0, 'd': 'x'}, {'c': 0, 'd': 'y'}, {'c':...
1  2  b  [{'c': 0, 'd': 'x'}, {'c': 1, 'd': 'y'}, {'c':...
2  3  c           [{'c': 0, 'd': 'z'}, {'c': 1, 'd': 'x'}]

 

或者,我们可以:

df['e'] = df[['c', 'd']].agg(lambda s: dict(zip(s.index, s.values)), axis=1)
df1 = df.groupby(['a', 'b'])['e'].agg(list).reset_index()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值