从字典的完整笛卡尔积中创建数据框

时间:2015-01-22 16:29:58

标签: python python-3.x pandas

考虑一个包含不同长度的迭代的字典:

{'column_1': range(10),
 'column_2': range(3),
 'column_3': ['foo']}

我想创建一个包含这些条目的完整笛卡尔积的数据框。那就是:

column 1, column_2, column_3
       0         0     'foo'
       0         1     'foo'
       0         2     'foo'
       1         0     'foo'           
       1         1     'foo'          
       1         2     'foo'           
           ...
       9         2     'foo'           

我怎么能在熊猫中做到这一点?也许使用collections

1 个答案:

答案 0 :(得分:3)

对熊猫不太熟悉,但这可能有用:

d={'column_1': range(10),
'column_2': range(3),
 'column_3': ['foo']}

import pandas as pd

from collections import OrderedDict
from itertools import product

od = OrderedDict(sorted(d.items()))
cart = list(product(*od.values()))

df = pd.DataFrame(cart,columns=od.keys())
print(df)


       column_1  column_2 column_3
0          0         0      foo
1          0         1      foo
2          0         2      foo
3          1         0      foo
4          1         1      foo
5          1         2      foo
6          2         0      foo
7          2         1      foo
8          2         2      foo
9          3         0      foo
10         3         1      foo
11         3         2      foo
12         4         0      foo
13         4         1      foo
14         4         2      foo
15         5         0      foo
16         5         1      foo
17         5         2      foo
18         6         0      foo
19         6         1      foo
20         6         2      foo
21         7         0      foo
22         7         1      foo
23         7         2      foo
24         8         0      foo
25         8         1      foo
26         8         2      foo
27         9         0      foo
28         9         1      foo
29         9         2      foo