2014-09-03 140 views
8

如果我有两个列表从两个列表中获取所有元素的组合?

l1 = [ 'A', 'B' ] 

l2 = [ 1, 2 ] 

什么是最优雅的方式来获得大熊猫的数据帧,看起来像:

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

注意,第一列是索引。

回答

18

使用productitertools

>>> 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 
4

作为替代,您可以使用熊猫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 ...

注意:previ cartesian_product位于。

+0

* atm有一个pd.MultiIndex.from_product,不知道DataFrame的构造函数是多么有用...... * – 2014-09-03 04:45:13

+1

从pandas 0.20.2开始,'cartesian_product()'在'pd.core.reshape.util'中。 。这个解决方案比使用'itertools.product'更快,并且可以通过使用非解压缩数据的np.array()。T来初始化数据帧,从而加快速度。 – 2017-07-05 09:18:17

相关问题