如何从pandas数据帧创建多值字典

时间:2013-09-24 16:16:46

标签: python-3.x pandas

假设我有一个包含2列的Pandas数据框(A列和B列): 对于“A”列中的值,“B”列中有多个值。 我想为每个键创建一个包含多个值的字典,这些值也应该是唯一的。请建议我这样做的方法。

2 个答案:

答案 0 :(得分:5)

一种方法是按列A:

进行分组
In [1]: df = pd.DataFrame([[1, 2], [1, 4], [5, 6]], columns=['A', 'B'])

In [2]: df
Out[2]:
   A  B
0  1  2
1  1  4
2  5  6

In [3]: g = df.groupby('A')

在小组的每一栏B上申请tolist

In [4]: g['B'].tolist()  # shorthand for .apply(lambda s: s.tolist()) "automatic delegation"
Out[4]:
A
1    [2, 4]
5       [6]
dtype: object

然后在此系列中致电to_dict

In [5]: g['B'].tolist().to_dict()
Out[5]: {1: [2, 4], 5: [6]}

如果您希望这些是唯一的,请使用unique(注意:这将创建一个numpy数组而不是列表):

In [11]: df = pd.DataFrame([[1, 2], [1, 2], [5, 6]], columns=['A', 'B'])

In [12]: g = df.groupby('A')

In [13]: g['B'].unique()
Out[13]:
A
1    [2]
5    [6]
dtype: object

In [14]: g['B'].unique().to_dict()
Out[14]: {1: array([2]), 5: array([6])}

其他替代方法是使用.apply(lambda s: set(s)).apply(lambda s: list(set(s))).apply(lambda s: list(s.unique())) ......

答案 1 :(得分:0)

您实际上可以在df.groupby对象上循环并将值收集为列表。

在[1]中:

df = pd.DataFrame([[1, 2], [1, 2], [5, 6]], columns=['A', 'B'])
{k: list(v) for k,v in df.groupby("A")["B"]}

出[1]:

{1: [2, 2], 5: [6]}