首页 > 解决方案 > 如何在具有不同行的条件下映射两个数据帧

问题描述

我有两个数据框需要根据某些条件进行映射(或加入?)。这些是数据框:

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

我希望上面的例子很清楚。

谢谢你。

标签: python-3.xpandasdataframemapping

解决方案


看起来你可以只提取数字部分并合并:

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

推荐阅读