我正在寻找一种最简单的方法,从另外两个数据框中创建一个数据框,使其包含所有元素的组合。例如,我们有这两个数据框。
list1 = ["A", "B", "C", "D", "E"]
list2 = ["x1", "x2", "x3", "x4", "x5", "x6", "x7", "x8"]
df1 = pd.DataFrame(list1)
df2 = pd.DataFrame(list2)
结果必须是:
0 1
0 A x1
1 A x2
2 A x3
3 A x4
4 A x5
5 A x6
6 A x7
7 A x8
8 B x1
9 B x2
我试着从列表中进行组合,小的列表可以正常工作,但大的列表就不行了,谢谢你。
list1 = ["A", "B", "C", "D", "E"]
list2 = ["x1", "x2", "x3", "x4", "x5", "x6", "x7", "x8"]
df1 = pd.DataFrame(list1)
df2 = pd.DataFrame(list2)
df1['key'] = 0
df2['key'] = 0
print( df1.merge(df2, on='key', how='outer').drop(columns='key') )
打印。
0_x 0_y
0 A x1
1 A x2
2 A x3
3 A x4
4 A x5
5 A x6
6 A x7
7 A x8
8 B x1
9 B x2
...
你可以使用 itertools.product
:
import itertools
import pandas as pd
list1 = ["A", "B", "C", "D", "E"]
list2 = ["x1", "x2", "x3", "x4", "x5", "x6", "x7", "x8"]
result = pd.DataFrame(list(itertools.product(list1, list2)))
你想把每个元素加入到 df1
浑身上下 df2
.
你可以使用 df.merge
:
In [1820]: df1['tmp'] = 1 ## Create a dummy key in df1
In [1821]: df2['tmp'] = 1 ## Create a dummy key in df2
## Merge both frames on `tmp`
In [1824]: df1.merge(df2, on='tmp').drop('tmp', 1).rename(columns={'0_x': '0', '0_y':'1'})
Out[1824]:
0 1
0 A x1
1 A x2
2 A x3
3 A x4
4 A x5
5 A x6
6 A x7
7 A x8
8 B x1
9 B x2
10 B x3
11 B x4
12 B x5
13 B x6
14 B x7
15 B x8
16 C x1
17 C x2
18 C x3
...
...