2014-09-03 138 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

相關問題