基于一个数据帧的子串加入两个数据帧

2024-06-17 12:25:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试合并两个数据帧,其中df1列A包含df2列B的子字符串

例如

df1:
columnA Actual
AB      Apple
CD      Straw
EF      Ele

df2:
ColumnB  Values
UserAB    1
UserCD    2
UserEF    3
UserGH    4 
UserIJ    5

我正在寻找下面这样的输出,无法确定如何才能做到这一点。你知道吗

Output:
   ColumnB  Values  ColumnA  Actual
    UserAB    1      AB       Apple
    UserCD    2      CD       Straw
    UserEF    3      EF       Ele
    UserGH    4      NaN      NaN
    UserIJ    5      NaN      NaN

Tags: appleabcdnandf1valuesdf2actual
2条回答

您可以尝试使用str.extract()

p='({})'.format('|'.join(df1.columnA))
d=df1.set_index('columnA')['Actual']
s=df2.ColumnB.str.extract(p,expand=False)

df2=df2.assign(ColumnA=s,Actual=s.map(d))

  ColumnB  Values ColumnA Actual
0  UserAB       1      AB  Apple
1  UserCD       2      CD  Straw
2  UserEF       3      EF    Ele
3  UserGH       4     NaN    NaN
4  UserIJ       5     NaN    NaN

您可以使用df.append

df1 = df1.append(pd.DataFrame([[float('nan'), float('nan')], [float('nan'), float('nan')]], columns = ["ColumnA", "Actual"])).reset_index(drop=True)
df2 = df2.merge(df1, how = "left", on = df2.index).drop("key_0", axis = 1)

输出:

  ColumnB Values ColumnA Actual
0  UserAB      1      AB  Apple
1  UserCD      2      CD  Straw
2  UserEF      3      EF    Ele
3  UserGH      4     NaN    NaN
4  UserIJ      5     NaN    NaN

相关问题 更多 >