python-3.x - 如何在具有不同行的条件下映射两个数据帧
问题描述
我有两个数据框需要根据某些条件进行映射(或加入?)。这些是数据框:
df_1
img_names img_array
0 1_rel 253
1 1_rel_right 255
2 1_rel_top 250
3 4_rel 180
4 4_rel_right 182
5 4_rel_top 189
6 7_rel 217
7 7_rel_right 183
8 7_rel_top 196
df_2
List_No time
0 1 38
1 4 23
2 7 32
映射后,我想获得以下数据框:
df_3
img_names img_array List_No time
0 1_rel 253 1 38
1 1_rel_right 255 1 38
2 1_rel_top 250 1 38
3 4_rel 180 4 23
4 4_rel_right 182 4 23
5 4_rel_top 189 4 23
6 7_rel 217 7 32
7 7_rel_right 183 7 32
8 7_rel_top 196 7 32
基本上,df_2
' 的每一行被填充 3 次以匹配其中的行数,df_1
并且映射(如果我们可以这样说)是由df_1
'img_name
列的每一行中的拆分字符串完成的。中的行元素的名称img_names
可能有不同的名称,但它们中的每一个总是以某个数字(1,4,7
在这种情况下)和一个取消划线等开头。所以我需要拆分每行中的对应数字并将其与行元素映射的List_No
。
我希望上面的例子很清楚。
谢谢你。
解决方案
看起来你可以只提取数字部分并合并:
df_1['List_No'] = df_1['img_names'].str.split('_').str[0].astype(int)
df_3 = df_1.merge(df_2, on='List_No')
输出:
img_names img_array List_No time
0 1_rel 253 1 38
1 1_rel_right 255 1 38
2 1_rel_top 250 1 38
3 4_rel 180 4 23
4 4_rel_right 182 4 23
5 4_rel_top 189 4 23
6 7_rel 217 7 32
7 7_rel_right 183 7 32
8 7_rel_top 196 7 32
推荐阅读
- sql-server - 如何根据同一表中的其他行更新列的值
- html - 我如何能够进行自动化前端测试?
- r - 如何为 Cronbach 的 Alpha & ICC (metafor) 生成森林图?
- javascript - 在Phonegap App中下载HTML/页面为PDF
- python - 如何使用for循环在字典中添加值?
- amazon-web-services - 无法在“您的环境”中查看 AWS Cloud 9 环境
- excel - Excel VBA自动筛选昨天日期,不包括周末
- archlinux - 无法在 Archlinux 上设置 Tapping Enabled Default
- laravel - URL 明智的 cookie laravel
- python-3.x - Pandas 系列字符串比较