Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Pandas 将具有相同索引的系列列表转换为字典_Pandas_List_Series - Fatal编程技术网

Pandas 将具有相同索引的系列列表转换为字典

Pandas 将具有相同索引的系列列表转换为字典,pandas,list,series,Pandas,List,Series,我有一个熊猫系列的列表,每个都有相同的索引。我想将这个列表转换成一个字典,其中键是索引值(在所有系列中都是相同的,值是系列对象中的值列表)。以下是一个例子: series_1: A 1 B 2 C 3 series_2: A 11 B 22 C 33 将[series_1,series_2]转换为{'A':[1,11],'B':[2,22],'C':[3,33]}最有效的方法是什么?我需要一种有效的方法,因为我拥有的系列数量是10K,每个系列有20K个元素。这里是一种方法concat然后gr

我有一个熊猫系列的列表,每个都有相同的索引。我想将这个列表转换成一个字典,其中键是索引值(在所有系列中都是相同的,值是系列对象中的值列表)。以下是一个例子:

series_1:
A 1
B 2
C 3

series_2:
A 11
B 22
C 33

[series_1,series_2]
转换为
{'A':[1,11],'B':[2,22],'C':[3,33]}
最有效的方法是什么?我需要一种有效的方法,因为我拥有的系列数量是10K,每个系列有20K个元素。

这里是一种方法
concat
然后
groupby

pd.concat([s1,s2]).groupby(level=0).apply(list).to_dict()
Out[375]: {'A': [1, 11], 'B': [2, 22], 'C': [3, 33]}

更新

pd.concat([s1,s2],axis=1).T.to_dict('l')
Out[379]: {'A': [1, 11], 'B': [2, 22], 'C': [3, 33]}

最好的性能是转换为numpy数组字典而不是列表字典,并使用该系列的
np.array
构造字典

此外,如果您确实需要列表字典,那么在
s.index
np.array.tolist()
上使用
dict
zip
仍然比上述两种方法好得多。上述两种方法都有创建数据帧的开销

设置:一系列20k数字

在1000系列上创建
np.array
字典

dict(zip(s.index, np.column_stack([s.values]*1000)))
dict(zip(s.index, np.column_stack([s.values]*1000).tolist()))
在1000系列上创建
列表的词典

dict(zip(s.index, np.column_stack([s.values]*1000)))
dict(zip(s.index, np.column_stack([s.values]*1000).tolist()))
所有4种方法的计时:

In [1071]: %timeit dict(zip(s.index, np.column_stack([s.values]*1000)))
195 ms ± 879 µs per loop (mean ± std. dev. of 7 runs, 1 loop each)

In [1072]:  %timeit dict(zip(s.index, np.column_stack([s.values]*1000).tolist()))
1.05 s ± 4.26 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

In [1075]: %timeit pd.concat([s]*1000).groupby(level=0).apply(list).to_dict()
7.01 s ± 70.5 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

In [1077]: %timeit pd.concat([s]*1000, axis=1).T.to_dict('l')
2.83 s ± 11.2 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

使用
numpy
序列数组和
dict
zip
比使用
pd.concat
的两种方法都要快得多。
np.array
字典在
195ms时速度最快
比下一个快5倍以上。

谢谢。请查看问题中我的编辑,了解我需要效率的原因。对于每个有20K个元素的1000个系列,您的方法需要8秒,而列表和索引上的嵌套循环需要5秒。我需要一个更有效的方法。更新的版本需要2.5秒的相同设置,谢谢。