Python系列,其中值是列表,获取另一个系列,其中索引列表对应于每个项目列表



对不起,标题很难理解——不知道如何措辞。假设我有一个看起来像这样的系列

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']}

即我可以看到哪些键对应于一系列列表中的每个元素。任何想法如何尽可能有效地做到这一点?谢谢!

让我们使用explode

s.explode().reset_index().groupby(0)['index'].agg(list).to_dict()
{'x': ['a', 'c'], 'y': ['a', 'b'], 'z': ['a', 'b', 'c']}

另一种使用默认速度字典的解决方案:

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']}

计时:

%时间它 s.explode((.reset_index((.groupby(0(['index'].agg(list(.to_dict((
3.94 ms ± 每个循环 119 μs(平均 ± 标准开发 7 次运行,每次 100 次循环(

%%timeit d = 默认指令(列表( 方法 300 μs
± 33.4 μs/l0op (平均 ± 标准 7 次运行,1000 次 每个循环(

这也是第二个解决方案:

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']}

最新更新