In [2]:
import pandas as pd
import uuid

In [3]:
example_data = [
    {
        'id': uuid.uuid4(),
        'text': 'Test A'
    },
    {
        'id': uuid.uuid4(),
        'text': 'Test B'
    },
    {
        'id': uuid.uuid4(),
        'text': 'Test C'
    },
    {
        'id': uuid.uuid4(),
        'text': 'Test D'
    },
    {
        'id': uuid.uuid4(),
        'text': 'Test E'
    },
    {
        'id': uuid.uuid4(),
        'text': 'Test F'
    },
]
example_df = pd.DataFrame(example_data)

In [4]:
example_df


Out[4]:
id text
0 a91f1bc6-7241-4347-a331-2a982c6f8bcf Test A
1 5bdfe454-f722-443c-a7d5-6267dfa403bd Test B
2 cd8d8038-2613-405c-9205-32a73009f8c1 Test C
3 63fd8506-6e66-43d3-b18c-cf3d81ad5b1c Test D
4 c03bffdf-9a79-499f-93ef-29e1ee02569b Test E
5 bd287a17-9e8f-494c-8611-fdb7335c05af Test F

In [5]:
import itertools

In [6]:
ids = example_df['id']

In [7]:
ids


Out[7]:
0    a91f1bc6-7241-4347-a331-2a982c6f8bcf
1    5bdfe454-f722-443c-a7d5-6267dfa403bd
2    cd8d8038-2613-405c-9205-32a73009f8c1
3    63fd8506-6e66-43d3-b18c-cf3d81ad5b1c
4    c03bffdf-9a79-499f-93ef-29e1ee02569b
5    bd287a17-9e8f-494c-8611-fdb7335c05af
Name: id, dtype: object

In [8]:
pairs = pd.DataFrame(list(itertools.product(ids, ids)), columns=['id1', 'id2'])

In [36]:
pairs


Out[36]:
id1 id2
0 a91f1bc6-7241-4347-a331-2a982c6f8bcf a91f1bc6-7241-4347-a331-2a982c6f8bcf
1 a91f1bc6-7241-4347-a331-2a982c6f8bcf 5bdfe454-f722-443c-a7d5-6267dfa403bd
2 a91f1bc6-7241-4347-a331-2a982c6f8bcf cd8d8038-2613-405c-9205-32a73009f8c1
3 a91f1bc6-7241-4347-a331-2a982c6f8bcf 63fd8506-6e66-43d3-b18c-cf3d81ad5b1c
4 a91f1bc6-7241-4347-a331-2a982c6f8bcf c03bffdf-9a79-499f-93ef-29e1ee02569b
5 a91f1bc6-7241-4347-a331-2a982c6f8bcf bd287a17-9e8f-494c-8611-fdb7335c05af
6 5bdfe454-f722-443c-a7d5-6267dfa403bd a91f1bc6-7241-4347-a331-2a982c6f8bcf
7 5bdfe454-f722-443c-a7d5-6267dfa403bd 5bdfe454-f722-443c-a7d5-6267dfa403bd
8 5bdfe454-f722-443c-a7d5-6267dfa403bd cd8d8038-2613-405c-9205-32a73009f8c1
9 5bdfe454-f722-443c-a7d5-6267dfa403bd 63fd8506-6e66-43d3-b18c-cf3d81ad5b1c
10 5bdfe454-f722-443c-a7d5-6267dfa403bd c03bffdf-9a79-499f-93ef-29e1ee02569b
11 5bdfe454-f722-443c-a7d5-6267dfa403bd bd287a17-9e8f-494c-8611-fdb7335c05af
12 cd8d8038-2613-405c-9205-32a73009f8c1 a91f1bc6-7241-4347-a331-2a982c6f8bcf
13 cd8d8038-2613-405c-9205-32a73009f8c1 5bdfe454-f722-443c-a7d5-6267dfa403bd
14 cd8d8038-2613-405c-9205-32a73009f8c1 cd8d8038-2613-405c-9205-32a73009f8c1
15 cd8d8038-2613-405c-9205-32a73009f8c1 63fd8506-6e66-43d3-b18c-cf3d81ad5b1c
16 cd8d8038-2613-405c-9205-32a73009f8c1 c03bffdf-9a79-499f-93ef-29e1ee02569b
17 cd8d8038-2613-405c-9205-32a73009f8c1 bd287a17-9e8f-494c-8611-fdb7335c05af
18 63fd8506-6e66-43d3-b18c-cf3d81ad5b1c a91f1bc6-7241-4347-a331-2a982c6f8bcf
19 63fd8506-6e66-43d3-b18c-cf3d81ad5b1c 5bdfe454-f722-443c-a7d5-6267dfa403bd
20 63fd8506-6e66-43d3-b18c-cf3d81ad5b1c cd8d8038-2613-405c-9205-32a73009f8c1
21 63fd8506-6e66-43d3-b18c-cf3d81ad5b1c 63fd8506-6e66-43d3-b18c-cf3d81ad5b1c
22 63fd8506-6e66-43d3-b18c-cf3d81ad5b1c c03bffdf-9a79-499f-93ef-29e1ee02569b
23 63fd8506-6e66-43d3-b18c-cf3d81ad5b1c bd287a17-9e8f-494c-8611-fdb7335c05af
24 c03bffdf-9a79-499f-93ef-29e1ee02569b a91f1bc6-7241-4347-a331-2a982c6f8bcf
25 c03bffdf-9a79-499f-93ef-29e1ee02569b 5bdfe454-f722-443c-a7d5-6267dfa403bd
26 c03bffdf-9a79-499f-93ef-29e1ee02569b cd8d8038-2613-405c-9205-32a73009f8c1
27 c03bffdf-9a79-499f-93ef-29e1ee02569b 63fd8506-6e66-43d3-b18c-cf3d81ad5b1c
28 c03bffdf-9a79-499f-93ef-29e1ee02569b c03bffdf-9a79-499f-93ef-29e1ee02569b
29 c03bffdf-9a79-499f-93ef-29e1ee02569b bd287a17-9e8f-494c-8611-fdb7335c05af
30 bd287a17-9e8f-494c-8611-fdb7335c05af a91f1bc6-7241-4347-a331-2a982c6f8bcf
31 bd287a17-9e8f-494c-8611-fdb7335c05af 5bdfe454-f722-443c-a7d5-6267dfa403bd
32 bd287a17-9e8f-494c-8611-fdb7335c05af cd8d8038-2613-405c-9205-32a73009f8c1
33 bd287a17-9e8f-494c-8611-fdb7335c05af 63fd8506-6e66-43d3-b18c-cf3d81ad5b1c
34 bd287a17-9e8f-494c-8611-fdb7335c05af c03bffdf-9a79-499f-93ef-29e1ee02569b
35 bd287a17-9e8f-494c-8611-fdb7335c05af bd287a17-9e8f-494c-8611-fdb7335c05af

In [39]:
merged_pairs_one = pd.merge(pairs, example_df, left_on='id1', right_on='id')
merged_pairs_two = pd.merge(pairs, example_df, left_on='id2', right_on='id')

In [43]:
example_df


Out[43]:
id text
0 a91f1bc6-7241-4347-a331-2a982c6f8bcf Test A
1 5bdfe454-f722-443c-a7d5-6267dfa403bd Test B
2 cd8d8038-2613-405c-9205-32a73009f8c1 Test C
3 63fd8506-6e66-43d3-b18c-cf3d81ad5b1c Test D
4 c03bffdf-9a79-499f-93ef-29e1ee02569b Test E
5 bd287a17-9e8f-494c-8611-fdb7335c05af Test F

In [15]:
len(final_pairs)


Out[15]:
36

In [17]:
final_pairs.head()


Out[17]:
id1 id2 id_x text_x id_y text_y
0 a91f1bc6-7241-4347-a331-2a982c6f8bcf a91f1bc6-7241-4347-a331-2a982c6f8bcf a91f1bc6-7241-4347-a331-2a982c6f8bcf Test A a91f1bc6-7241-4347-a331-2a982c6f8bcf Test A
1 5bdfe454-f722-443c-a7d5-6267dfa403bd a91f1bc6-7241-4347-a331-2a982c6f8bcf 5bdfe454-f722-443c-a7d5-6267dfa403bd Test B a91f1bc6-7241-4347-a331-2a982c6f8bcf Test A
2 cd8d8038-2613-405c-9205-32a73009f8c1 a91f1bc6-7241-4347-a331-2a982c6f8bcf cd8d8038-2613-405c-9205-32a73009f8c1 Test C a91f1bc6-7241-4347-a331-2a982c6f8bcf Test A
3 63fd8506-6e66-43d3-b18c-cf3d81ad5b1c a91f1bc6-7241-4347-a331-2a982c6f8bcf 63fd8506-6e66-43d3-b18c-cf3d81ad5b1c Test D a91f1bc6-7241-4347-a331-2a982c6f8bcf Test A
4 c03bffdf-9a79-499f-93ef-29e1ee02569b a91f1bc6-7241-4347-a331-2a982c6f8bcf c03bffdf-9a79-499f-93ef-29e1ee02569b Test E a91f1bc6-7241-4347-a331-2a982c6f8bcf Test A

In [33]:
rows = itertools.product(example_df.iterrows(), example_df.iterrows())

In [44]:
import numpy as np

In [45]:


In [46]:
i


Out[46]:
array([0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4,
       4, 4, 4, 5, 5, 5, 5, 5])

In [47]:
merged_pairs = example_df.iloc[i].reset_index(drop=True).join(example_df.iloc[j].reset_index(drop=True), rsuffix='_2')

In [51]:
merged_pairs.columns = ['id_1', 'text_1', 'id_2', 'text_2']

In [52]:
merged_pairs


Out[52]:
id_1 text_1 id_2 text_2
0 a91f1bc6-7241-4347-a331-2a982c6f8bcf Test A 5bdfe454-f722-443c-a7d5-6267dfa403bd Test B
1 a91f1bc6-7241-4347-a331-2a982c6f8bcf Test A cd8d8038-2613-405c-9205-32a73009f8c1 Test C
2 a91f1bc6-7241-4347-a331-2a982c6f8bcf Test A 63fd8506-6e66-43d3-b18c-cf3d81ad5b1c Test D
3 a91f1bc6-7241-4347-a331-2a982c6f8bcf Test A c03bffdf-9a79-499f-93ef-29e1ee02569b Test E
4 a91f1bc6-7241-4347-a331-2a982c6f8bcf Test A bd287a17-9e8f-494c-8611-fdb7335c05af Test F
5 5bdfe454-f722-443c-a7d5-6267dfa403bd Test B a91f1bc6-7241-4347-a331-2a982c6f8bcf Test A
6 5bdfe454-f722-443c-a7d5-6267dfa403bd Test B cd8d8038-2613-405c-9205-32a73009f8c1 Test C
7 5bdfe454-f722-443c-a7d5-6267dfa403bd Test B 63fd8506-6e66-43d3-b18c-cf3d81ad5b1c Test D
8 5bdfe454-f722-443c-a7d5-6267dfa403bd Test B c03bffdf-9a79-499f-93ef-29e1ee02569b Test E
9 5bdfe454-f722-443c-a7d5-6267dfa403bd Test B bd287a17-9e8f-494c-8611-fdb7335c05af Test F
10 cd8d8038-2613-405c-9205-32a73009f8c1 Test C a91f1bc6-7241-4347-a331-2a982c6f8bcf Test A
11 cd8d8038-2613-405c-9205-32a73009f8c1 Test C 5bdfe454-f722-443c-a7d5-6267dfa403bd Test B
12 cd8d8038-2613-405c-9205-32a73009f8c1 Test C 63fd8506-6e66-43d3-b18c-cf3d81ad5b1c Test D
13 cd8d8038-2613-405c-9205-32a73009f8c1 Test C c03bffdf-9a79-499f-93ef-29e1ee02569b Test E
14 cd8d8038-2613-405c-9205-32a73009f8c1 Test C bd287a17-9e8f-494c-8611-fdb7335c05af Test F
15 63fd8506-6e66-43d3-b18c-cf3d81ad5b1c Test D a91f1bc6-7241-4347-a331-2a982c6f8bcf Test A
16 63fd8506-6e66-43d3-b18c-cf3d81ad5b1c Test D 5bdfe454-f722-443c-a7d5-6267dfa403bd Test B
17 63fd8506-6e66-43d3-b18c-cf3d81ad5b1c Test D cd8d8038-2613-405c-9205-32a73009f8c1 Test C
18 63fd8506-6e66-43d3-b18c-cf3d81ad5b1c Test D c03bffdf-9a79-499f-93ef-29e1ee02569b Test E
19 63fd8506-6e66-43d3-b18c-cf3d81ad5b1c Test D bd287a17-9e8f-494c-8611-fdb7335c05af Test F
20 c03bffdf-9a79-499f-93ef-29e1ee02569b Test E a91f1bc6-7241-4347-a331-2a982c6f8bcf Test A
21 c03bffdf-9a79-499f-93ef-29e1ee02569b Test E 5bdfe454-f722-443c-a7d5-6267dfa403bd Test B
22 c03bffdf-9a79-499f-93ef-29e1ee02569b Test E cd8d8038-2613-405c-9205-32a73009f8c1 Test C
23 c03bffdf-9a79-499f-93ef-29e1ee02569b Test E 63fd8506-6e66-43d3-b18c-cf3d81ad5b1c Test D
24 c03bffdf-9a79-499f-93ef-29e1ee02569b Test E bd287a17-9e8f-494c-8611-fdb7335c05af Test F
25 bd287a17-9e8f-494c-8611-fdb7335c05af Test F a91f1bc6-7241-4347-a331-2a982c6f8bcf Test A
26 bd287a17-9e8f-494c-8611-fdb7335c05af Test F 5bdfe454-f722-443c-a7d5-6267dfa403bd Test B
27 bd287a17-9e8f-494c-8611-fdb7335c05af Test F cd8d8038-2613-405c-9205-32a73009f8c1 Test C
28 bd287a17-9e8f-494c-8611-fdb7335c05af Test F 63fd8506-6e66-43d3-b18c-cf3d81ad5b1c Test D
29 bd287a17-9e8f-494c-8611-fdb7335c05af Test F c03bffdf-9a79-499f-93ef-29e1ee02569b Test E

In [ ]: