首页 > 解决方案 > 将列值分组成对 - 熊猫

问题描述

我有一个df:

idx  pairs
1   ['000001.jpg', '000002.jpg']
2   ['000006.jpg', '000007.jpg', '000008.jpg', '000004.jpg', '000005.jpg', '000003.jpg']
3   ['000016.jpg', '000020.jpg', '000017.jpg', '000010.jpg', '000011.jpg', '000012.jpg'...]

对可以有任意长度的列表。我想将“对”的新 df 创建为一对,其中第一部分始终是对列表中的第一个。例如:

idx pairs
1 ['000001.jpg', '000002.jpg']
2 ['000006.jpg', '000007.jpg']
3 ['000006.jpg', '000008.jpg']
4 ['000006.jpg', '000004.jpg']
5 ['000006.jpg', '000005.jpg']
6 ['000006.jpg', '000003.jpg']
7 ['000016.jpg', '000020.jpg']
8 ['000016.jpg', '000017.jpg']
9 ['000016.jpg', '000010.jpg']
10 ['000016.jpg', '000011.jpg']
11 ['000016.jpg', '000012.jpg'] 

标签: pythonpandas

解决方案


似乎是一个很好的爆炸案例。

df['first'] = df.pairs.apply(lambda x: x[0])
df['others'] = df.pairs.apply(lambda x: x[1:])
df = df.explode('others')[['first', 'others']]
df = pd.DataFrame({'pairs': df.values.tolist()})
df = df.rename_axis('idx').reset_index()
df.idx += 1

那么头部df会是这样的:

   idx                     pairs
0    1  [000001.jpg, 000002.jpg]
1    2  [000006.jpg, 000007.jpg]
2    3  [000006.jpg, 000008.jpg]
3    4  [000006.jpg, 000004.jpg]
4    5  [000006.jpg, 000005.jpg]
5    6  [000006.jpg, 000003.jpg]


推荐阅读