从两个列表中获取所有元素组合?

时间:2014-09-03 00:39:08

标签: python pandas

如果我有两个列表

l1 = [ 'A', 'B' ]

l2 = [ 1, 2 ]

获得pandas数据框的最优雅方式是什么:

+-----+-----+-----+
|     | l1  | l2  |
+-----+-----+-----+
|  0  | A   | 1   |
+-----+-----+-----+
|  1  | A   | 2   |
+-----+-----+-----+
|  2  | B   | 1   |
+-----+-----+-----+
|  3  | B   | 2   |
+-----+-----+-----+

注意,第一列是索引。

3 个答案:

答案 0 :(得分:26)

使用itertools中的product

>>> from itertools import product
>>> pd.DataFrame(list(product(l1, l2)), columns=['l1', 'l2'])
  l1  l2
0  A   1
1  A   2
2  B   1
3  B   2

答案 1 :(得分:10)

作为替代方案,您可以使用熊猫' cartesian_product(对于大型numpy数组可能更有用):

In [11]: lp1, lp2 = pd.core.reshape.util.cartesian_product([l1, l2])

In [12]: pd.DataFrame(dict(l1=lp1, l2=lp2))
Out[12]:
  l1  l2
0  A   1
1  A   2
2  B   1
3  B   2

使用正确的方向读入DataFrame看起来有点混乱......

注意:之前cartesian_product位于pd.tools.util.cartesian_product

答案 2 :(得分:2)

您还可以使用sklearn库,该库使用基于NumPy的方法:

from sklearn.utils.extmath import cartesian

df = pd.DataFrame(cartesian((L1, L2)))

有关更详细但可能更有效的变体,请参见Numpy: cartesian product of x and y array points into single array of 2D points