问题描述
我们有以下数据帧:
df = pd.DataFrame({'name': ['John','Max','Ethan','Karen','Carl','Jenny']})
df:
name
0 John
1 Max
2 Ethan
3 Caren
4 Carl
5 Jenny
6 Claudia
...
对于每一行,我喜欢:
滚动 0:(下一行)
name name_2
0 John Max
1 Max John
2 Ethan Caren
3 Caren Ethan
4 Carl Jenny
5 Jenny Carl
6 Claudia Whoever
...
滚动 1(下一行 + 1):
name name_2
0 John Ethan
1 Max Caren
2 Ethan John
3 Caren Max
4 Carl Claudia
5 Jenny Whoever
6 Claudia Carl
...
知道如何解决这个问题吗?在真实数据集中,不仅有名称,而且实际上有 5 列。
解决方法
在评论中,您注意到您想要创建不重复的配对。这些是组合。因此,更简单的方法是使用 itertools.combinations()
df = pd.read_csv(io.StringIO(""" name
0 John
1 Max
2 Ethan
3 Caren
4 Carl
5 Jenny
6 Claudia"""),sep="\s+")
import itertools
pd.DataFrame(itertools.combinations(df.name.to_list(),2),columns=["name","name_2"])
名称 | name_2 | |
---|---|---|
0 | 约翰 | 最大 |
1 | 约翰 | 伊森 |
2 | 约翰 | Caren |
3 | 约翰 | 卡尔 |
4 | 约翰 | 珍妮 |
5 | 约翰 | 克劳迪娅 |
6 | 最大 | 伊森 |
7 | 最大 | Caren |
8 | 最大 | 卡尔 |
9 | 最大 | 珍妮 |
10 | 最大 | 克劳迪娅 |
11 | 伊森 | Caren |
12 | 伊森 | 卡尔 |
13 | 伊森 | 珍妮 |
14 | 伊森 | 克劳迪娅 |
15 | Caren | 卡尔 |
16 | Caren | 珍妮 |
17 | Caren | 克劳迪娅 |
18 | 卡尔 | 珍妮 |
19 | 卡尔 | 克劳迪娅 |
20 | 珍妮 | 克劳迪娅 |