抱歉,标题很难理解-不确定如何用短语表达。说我有一个看起来像这样的系列
s = pd.Series(index = ['a','b','c'], data = [['x','y','z'], ['y','z'], ['x','z']]).
我想要这样的东西
{'x':['a','c'], 'y':['a','b'], 'z':['a','b','c']}
即我可以看到哪些键对应于一系列列表中的每个元素。有什么想法我如何尽可能有效地做到这一点?谢谢!
答案 0 :(得分:4)
让我们使用explode
s.explode().reset_index().groupby(0)['index'].agg(list).to_dict()
{'x': ['a', 'c'], 'y': ['a', 'b'], 'z': ['a', 'b', 'c']}
答案 1 :(得分:1)
另一种使用默认dict速度的解决方案:
from collections import defaultdict
d = defaultdict(list)
q = s.explode()
for k, v in q.items():
d[v].append(k)
dict(d)
输出:
{'x': ['a', 'c'], 'y': ['a', 'b'], 'z': ['a', 'b', 'c']}
时间:
%timeit s.explode()。reset_index()。groupby(0)['index']。agg(list).to_dict()
每次循环3.94 ms±119 µs(平均±标准偏差,共运行7次,每个循环100次)%% timeit d = defaultdict(list)方法
每100毫秒300 µs±33.4 µs(平均±标准偏差,每7次运行,1000 每个循环)
答案 2 :(得分:0)
这也是第二种解决方案:
x = s.explode()
pd.DataFrame({'X':x.index, 'Y':x.values}).groupby('Y')['X'].apply(list).to_dict()
# {'x': ['a', 'c'], 'y': ['a', 'b'], 'z': ['a', 'b', 'c']}