我有两个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.startswith
与map
使用,但没有成功。
您可以使用以下步骤:
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