熊猫 - 结合两个系列的所有独特组合

bil*_*ill 2 python pandas

假设我有以下系列:

0    A
1    B
2    C
dtype: object

0    1
1    2
2    3
3    4
dtype: int64
Run Code Online (Sandbox Code Playgroud)

如何合并它们以创建包含每个可能的值组合的空数据框,如下所示:

   letter  number
0       A       1
1       A       2
2       A       3
3       A       4
4       B       1
5       B       2
6       B       3
7       B       4
8       C       1
9       C       2
10      C       3
11      C       4
Run Code Online (Sandbox Code Playgroud)

ank*_*_91 5

假设2系列是ss1,使用itertools.product()它给出了输入迭代笛卡尔积:

import itertools
df = pd.DataFrame(list(itertools.product(s,s1)),columns=['letter','number'])
print(df)

    letter  number
0       A       1
1       A       2
2       A       3
3       A       4
4       B       1
5       B       2
6       B       3
7       B       4
8       C       1
9       C       2
10      C       3
11      C       4
Run Code Online (Sandbox Code Playgroud)


Nic*_*CHK 5

从 Pandas 1.2.0 开始,有一个how='cross'选项pandas.merge()可以生成列的笛卡尔积。

import pandas as pd

letters = pd.DataFrame({'letter': ['A','B','C']})
numbers = pd.DataFrame({'number': [1,2,3,4]})

together = pd.merge(letters, numbers, how = 'cross')
Run Code Online (Sandbox Code Playgroud)
   letter  number
0       A       1
1       A       2
2       A       3
3       A       4
4       B       1
5       B       2
6       B       3
7       B       4
8       C       1
9       C       2
10      C       3
11      C       4
Run Code Online (Sandbox Code Playgroud)

作为额外的好处,此功能可以轻松地使用多个列来完成此操作。

   letter  number
0       A       1
1       A       2
2       A       3
3       A       4
4       B       1
5       B       2
6       B       3
7       B       4
8       C       1
9       C       2
10      C       3
11      C       4
Run Code Online (Sandbox Code Playgroud)
   letterA letterB  number
0        A       D       1
1        A       D       2
2        A       D       3
3        A       D       4
4        B       D       1
5        B       D       2
6        B       D       3
7        B       D       4
8        C       E       1
9        C       E       2
10       C       E       3
11       C       E       4
Run Code Online (Sandbox Code Playgroud)