对不起,标题很难理解——不知道如何措辞。假设我有一个看起来像这样的系列
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']}