python - 将列值分组成对 - 熊猫
问题描述
我有一个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']
解决方案
似乎是一个很好的爆炸案例。
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]
推荐阅读
- elasticsearch - Elasticsearch 在顶级聚合中包含其他字段
- c++ - 键值映射中的部分查找,其中键本身是键值映射
- vuejs2 - 为什么第一次访问时没有调用激活的生命周期挂钩
- typescript - 笑话 TypeScript 类“没有重载需要 1 个类型参数”
- sql - 选择邮政编码并放入新列
- selenium-chromedriver - 如何在 beforeSession webdriverIO+Cucumber 中从 chromeOptions 设置参数
- android - 为什么 Kendo Dropdownlist 不适用于 chrome for android?
- c# - DataGrid DateTime IValueConverter,仅编辑时间,保留日期
- python - python中的多个循环
- php - 什么是在 PHP7 中使用匿名类的好例子