2014-09-03 16 views
8

Nếu tôi có hai danh sáchNhận tất cả kết hợp các yếu tố từ hai danh sách?

l1 = [ 'A', 'B' ] 

l2 = [ 1, 2 ] 

cách thanh lịch nhất để có được một khung dữ liệu gấu trúc trông giống như là những gì:

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

Note, cột đầu tiên là chỉ số.

Trả lời

18

sử dụng product từ itertools:

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

Là một thay thế, bạn có thể sử dụng gấu trúc cartesian_product (có thể hữu ích hơn với mảng NumPy lớn):

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 

Điều này có vẻ một chút lộn xộn để đọc vào một DataFrame với định hướng chính xác ...

Lưu ý: trước ously cartesian_product được đặt tại .

+0

* atm có một pd.MultiIndex.from_product, không chắc chắn cách xây dựng DataFrame hữu ích sẽ là ... * –

+1

Như của gấu trúc 0.20.2, 'cartesian_product()' nằm trong 'pd.core.reshape.util' . Giải pháp này nhanh hơn bằng cách sử dụng 'itertools.product' và có thể được thực hiện nhanh hơn bằng cách khởi tạo dataframe bằng' np.array(). T' của dữ liệu không giải nén thay thế. –

Các vấn đề liên quan