按两列中的值生成行

2024-06-25 23:25:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我刚加入my first kaggle competition。我有一张这样的桌子:

| Person_id | Children_id | Person_Photos                      | Children_Photos        |
|-----------|-------------|------------------------------------|------------------------|
| pid1      | cid1        | pid1_0.jpg, pid1_1.jpg, pid1_2.jpg | cid1_0.jpg, cid1_1.jpg |
| pid2      | cid1        | pid2_0.jpg, pid2_1.jpg, pid1_2.jpg | cid1_0.jpg, cid1_1.jpg |

我想为每个人生成一行照片和儿童照片匹配。例如:

| Person_id | Children_id | Person_Photo | Children_Photo |
|-----------|-------------|--------------|----------------|
| pid1      | cid1        | pid1_0.jpg   | cid1_0.jpg     |
| pid1      | cid1        | pid1_0.jpg   | cid1_1.jpg     |
| pid1      | cid1        | pid1_1.jpg   | cid1_0.jpg     |
| pid1      | cid1        | pid1_1.jpg   | cid1_1.jpg     |
| pid1      | cid1        | pid1_2.jpg   | cid1_0.jpg     |
| pid1      | cid1        | pid1_2.jpg   | cid1_1.jpg     |
| pid2      | cid1        | pid2_0.jpg   | cid1_0.jpg     |
| pid2      | cid1        | pid2_0.jpg   | cid1_1.jpg     |
| pid2      | cid1        | pid2_1.jpg   | cid1_0.jpg     |
| pid2      | cid1        | pid2_1.jpg   | cid1_1.jpg     |
| pid2      | cid1        | pid2_2.jpg   | cid1_0.jpg     |
| pid2      | cid1        | pid2_2.jpg   | cid1_1.jpg     |

如何使用熊猫实现这一点?提前感谢您的任何意见!你知道吗


Tags: idmy照片personfirstjpgchildrenphoto
2条回答

可以应用Series两次:

one = df.apply(lambda x: pd.Series(x['Person_Photos']), axis=1).stack().reset_index(level=1, drop=True)
df = df.drop('Person_Photos', axis=1)
one.name = 'Person_Photos'
df = df.join(one)
two = df.apply(lambda x: pd.Series(x['Children_Photos']), axis=1).stack().reset_index(level=1, drop=True)
df = df.drop('Children_Photos', axis=1)
two.name = 'Children_Photos'
df = df.join(two)
s = pd.DataFrame({'Person_id':['pid1','pid2'],
                  'Children_id':['cid1','cid1'],
                 'Person_Photos':["'pid1_0.jpg', 'pid1_1.jpg', 'pid1_2.jpg'","'pid2_0.jpg', 'pid2_1.jpg', 'pid1_2.jpg'"],
                 'Children_Photos':["'cid1_0.jpg', 'cid1_1.jpg'","'cid1_0.jpg', 'cid1_1.jpg'"]})


one=s.set_index('Person_id').Person_Photos.str.split(',', expand=True).stack().reset_index('Person_id')
one.columns=['Person_id','Person_Photos']
# print(one)
# print('*'*50)
two=s.set_index('Children_id').Children_Photos.str.split(',', expand=True).stack().reset_index('Children_id')
two.columns=['Children_id','Children_Photos']
# print(two)

one['tmp'] = 1
two['tmp'] = 1

pd.merge(one, two, on=['tmp'])

输出

   Person_idPerson_Photos  tmp  Children_id Children_Photos
0   pid1    'pid1_0.jpg'    1   cid1    'cid1_0.jpg'
1   pid1    'pid1_0.jpg'    1   cid1    'cid1_1.jpg'
2   pid1    'pid1_0.jpg'    1   cid1    'cid1_0.jpg'
3   pid1    'pid1_0.jpg'    1   cid1    'cid1_1.jpg'
4   pid1    'pid1_1.jpg'    1   cid1    'cid1_0.jpg'
5   pid1    'pid1_1.jpg'    1   cid1    'cid1_1.jpg'
6   pid1    'pid1_1.jpg'    1   cid1    'cid1_0.jpg'
7   pid1    'pid1_1.jpg'    1   cid1    'cid1_1.jpg'
8   pid1    'pid1_2.jpg'    1   cid1    'cid1_0.jpg'
9   pid1    'pid1_2.jpg'    1   cid1    'cid1_1.jpg'
10  pid1    'pid1_2.jpg'    1   cid1    'cid1_0.jpg'
11  pid1    'pid1_2.jpg'    1   cid1    'cid1_1.jpg'
12  pid2    'pid2_0.jpg'    1   cid1    'cid1_0.jpg'
13  pid2    'pid2_0.jpg'    1   cid1    'cid1_1.jpg'
14  pid2    'pid2_0.jpg'    1   cid1    'cid1_0.jpg'
15  pid2    'pid2_0.jpg'    1   cid1    'cid1_1.jpg'
16  pid2    'pid2_1.jpg'    1   cid1    'cid1_0.jpg'
17  pid2    'pid2_1.jpg'    1   cid1    'cid1_1.jpg'
18  pid2    'pid2_1.jpg'    1   cid1    'cid1_0.jpg'
19  pid2    'pid2_1.jpg'    1   cid1    'cid1_1.jpg'
20  pid2    'pid1_2.jpg'    1   cid1    'cid1_0.jpg'
21  pid2    'pid1_2.jpg'    1   cid1    'cid1_1.jpg'
22  pid2    'pid1_2.jpg'    1   cid1    'cid1_0.jpg'
23  pid2    'pid1_2.jpg'    1   cid1    'cid1_1.jpg'

相关问题 更多 >