pandas 使用panda系列按键分组并导出到_dict()

von4xj4u  于 2023-03-06  发布在  其他
关注(0)|答案(2)|浏览(143)

我有一本字典,看起来像这样:

d = {1:0, 2:0, 3:1, 4:0, 5:2, 6:1, 7:2, 8:0}

我想用. keys()来分组,如下所示:

pandas_ordered = { 0:[1,2,4,8], 1:[3,6], 2:[5,7] }

但是有了这个命令

pd.Series(list(d.values())).groupby(list(partition.keys())).to_dict()

贝娄就是一个例子:

# Example:
import pandas as pd

d = {1:0, 2:0, 3:1, 4:0, 5:2, 6:1, 7:2, 8:0} 

def pandas_groupby(dictionary):
   values = list(dictionary.values())
   keys = list(dictionary.keys())
   return pd.Series(values).groupby(keys).to_dict()

pandas_groupby(d)

上面的代码产生错误:
属性错误:无法访问"SeriesGroupBy"对象的可调用特性"to_dict",请尝试使用"apply"方法
有什么办法吗?

cygmwpex

cygmwpex1#

您的dict已由您的groupby中的groups给定

d = {1:0, 2:0, 3:1, 4:0, 5:2, 6:1, 7:2, 8:0} 
s = pd.Series(d)
s.groupby(s).groups

{0: Int64Index([1, 2, 4, 8], dtype='int64'),
 1: Int64Index([3, 6], dtype='int64'),
 2: Int64Index([5, 7], dtype='int64')}

当然,您可以随时使用agg和自定义

s.groupby(s).agg(lambda x: tuple(x.index)).to_dict()

{0: (1, 2, 4, 8), 1: (3, 6), 2: (5, 7)}
daupos2t

daupos2t2#

试试这个:

pd.Series({1:0, 2:0, 3:1, 4:0, 5:2, 6:1, 7:2, 8:0},name='col1').reset_index()
.groupby("col1").agg(list)['index'].to_dict()

输出:

{0: [1, 2, 4, 8], 1: [3, 6], 2: [5, 7]}

相关问题