我想将我的数据帧转换为一个字典,其中键将是一个id列。我想将具有相应id的所有相应的第二列值放入列表中。
示例数据:
s1 = pd.Series(['A','A','B'],name = 's1')
s2 = pd.Series(['1','2','2'],name = 's2')
df = pd.concat([s1,s2],axis = 1)
s1 s2
A 1
A 2
B 2
想要输出
如何获得带有映射的字典:
d = {'A':[1,2],'B':[2]}
答案 0 :(得分:2)
如果你想使用pandas:
df.groupby("s1").s2.apply(lambda s:s.tolist()).to_dict()
但我认为defaultdict
是正确的方法:
from collections import defaultdict
s1 = ['A','A','B']
s2 = ['1','2','2']
d = defaultdict(list)
for k, v in zip(s1, s2):
d[k].append(v)
答案 1 :(得分:2)
还有两个选项
df.groupby('s1').s2.apply(list).to_dict()
Out[44]: {'A': ['1', '2'], 'B': ['2']}
s=df.groupby('s1').s2.apply(list)
dict(zip(s.index,s))
Out[48]: {'A': ['1', '2'], 'B': ['2']}
答案 2 :(得分:1)
Checkout Pandas groupBy functionality。
{k: list(s.values) for (k, s) in df.groupby('s1')['s2']}
返回
{'A': [1, 2], 'B': [2]}
答案 3 :(得分:1)
我总是想提出defaultdict
解决方案
from collections import defaultdict
d = defaultdict(list)
for k, v in zip(s1, s2):
d[k].append(v)
dict(d)
{'A': ['1', '2'], 'B': ['2']}