我有以下数据帧:
V1 = ['a','a','c','d']
V2 = ['test1', 'test2' , 'test3' , 'test4' ]
df = pd.DataFrame({'V1':V1,'V2':V2})
print(df.head())
V1 V2
a test1
a test2
c test3
d test4
我想循环如下:
for [unique element in v1 column]:
for [corresponding elements in V2]:
我想用以下格式构建一个字典:
dic = { 'a':['test1', 'test2'], 'c':['test3'] , 'd':['test4'] }
for elt in dic:
for i in dic[elt]:
有没有更好/更有效的方法来做这件事?如果没有,我该如何高效地构建这样一本词典?
非常感谢你的帮助!
使用panda构建字典的选项是:
dic = pd.Series(V2, index=V1).groupby(level=0).agg(list).to_dict()
输出:{'a': ['test1', 'test2'], 'c': ['test3'], 'd': ['test4']}
对于经典python,使用collections.defaultdict
:
from collections import defaultdict
dic = defaultdict(list)
for k,v in zip(V1, V2):
dic[k].append(v)
dict(dic)
# {'a': ['test1', 'test2'], 'c': ['test3'], 'd': ['test4']}
从初始数据帧循环您的值:
df = pd.DataFrame({'V1':V1,'V2':V2})
for name, d in df.groupby('V1'):
print(f'entering group {name}')
for value in d['V2']:
print(f' value {value}')
输出:
entering group a
value test1
value test2
entering group c
value test3
entering group d
value test4
您可以通过GroupBy.agg
聚合list
,然后通过DataFrame.to_dict
:将Series
转换为字典
#your DataFrame
df = pd.DataFrame({'V1':V1,'V2':V2})
d = df.groupby('V1')['V2'].agg(list).to_dict()
只使用python,没有panda!下面的代码只需要O(n)
时间,所以速度相当快。
from collections import defaultdict
V1 = ['a','a','c','d']
V2 = ['test1', 'test2' , 'test3' , 'test4' ]
my_dict = defaultdict(list)
for x, y in zip(V1, V2):
my_dict[x].append(y)
print(my_dict)
输出
defaultdict(<class 'list'>, {'a': ['test1', 'test2'], 'c': ['test3'], 'd': ['test4']})
如果你认为你有非常大的数据集,那么你可以使用其他pandasgroup by
解决方案;像上面这样高效的解决方案对于一般的用例来说已经足够好了。