我有一个庞大的Pandas数据框,其结构如下所示:
import pandas as pd
df = pd.DataFrame({'col1': ['A', 'A', 'B', 'C', 'C', 'C'], 'col2': [1, 2, 5, 2, 4, 6]})
df
col1 col2
0 A 1
1 A 2
2 B 5
3 C 2
4 C 4
5 C 6
任务是构建一个字典,将col1
中的元素作为键,并将col2
中的相应元素作为值。对于上面的示例,输出应为:
A -> [1, 2]
B -> [5]
C -> [2, 4, 6]
尽管我将解决方案写为
from collections import defaultdict
dd = defaultdict(set)
for row in df.itertuples():
dd[row.col1].append(row.col2)
我想知道是否有人使用内置的熊猫函数知道更多的“ Python原生”解决方案。
答案 0 :(得分:4)
没有apply
,我们通过for循环来实现
{x : y.tolist() for x , y in df.col2.groupby(df.col1)}
{'A': [1, 2], 'B': [5], 'C': [2, 4, 6]}
答案 1 :(得分:3)
将GroupBy.apply
与list
一起用于列表中的Series
,然后使用Series.to_dict
:
d = df.groupby('col1')['col2'].apply(list).to_dict()
print (d)
{'A': [1, 2], 'B': [5], 'C': [2, 4, 6]}