熊猫:将第 x 行作为列

问题描述

我们有以下数据帧:

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 珍妮 克劳迪娅