假设我有以下系列:
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)
假设2系列是s和s1,使用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)
从 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)
| 归档时间: |
|
| 查看次数: |
366 次 |
| 最近记录: |