如何根据第一个数据框中包含的字符串开头的列将数据框映射到另一个框架



我有两个dataframes,我想从一个到另一个映射信息。

第一个数据框:

    A         B    
0   pokaichi  56156 
1   klavatur  45156  
2   monopol   32154 
3   berate    98741 

第二个数据框:

    C   D      E
0   be  18485  Bond
1   mo  14285  Roger
2   kl  74853  Mika
3   po  85655  Loki

如何将E列从第二个dataframe映射到第一个数据帧,以便第一个dataframe的新列是以开始的A列中字符串的结果在C列中?

因此,在应用映射之后,第一个数据帧应该看起来像这样:

    A         B      E
0   pokaichi  56156  Loki
1   klavatur  45156  Mika
2   monopol   32154  Roger
3   berate    98741  Bond

我尝试使用str.startswithmap使用,但没有成功。

您可以使用以下步骤:

pat=r'({})'.format('|'.join(df2.C))
#'(be|mo|kl|po)'
d=df2.set_index('C')['E'] #creating a series with C as Index and E as values

然后我们使用:series.str.extract()df1.A提取df2.C并使用series.map()我们映射值以生成预期的输出。

df1['E']=df1.A.str.extract(pat,expand=False).map(d)
print(df1)

          A      B      E
0  pokaichi  56156   Loki
1  klavatur  45156   Mika
2   monopol  32154  Roger
3    berate  98741   Bond
In [31]: df1
Out[31]:
          A      B
0  pokaichi  56156
1  klavatur  45156
2   monopol  32154
3    berate   9741
In [32]: df2
Out[32]:
    C      D      E
0  be  18485   Bond
1  mo  14285  Roger
2  kl  74853   Mika
3  po  85655   Loki
In [33]: df1['C'] = df1['A'].str[:2].map(df2.set_index('C')['E'])
In [34]: df1
Out[34]:
          A      B      C
0  pokaichi  56156   Loki
1  klavatur  45156   Mika
2   monopol  32154  Roger
3    berate   9741   Bond

另外,如果您可以创建新的数据框架,则可以合并。

In [43]: df1.merge(df2[['C', 'E']], left_on=df1['A'].str[:2], right_on='C').drop('C', axis=1)
Out[43]:
          A      B      E
0  pokaichi  56156   Loki
1  klavatur  45156   Mika
2   monopol  32154  Roger
3    berate   9741   Bond

最新更新