【问题标题】:join in two pandas dataframe based on substring of one dataframe基于一个数据帧的子字符串加入两个熊猫数据帧
【发布时间】:2019-08-08 04:03:01
【问题描述】:

我正在尝试合并两个数据框,其中 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

【问题讨论】:

  • ColumnA 中的子字符串和ColumnB 中的字符串是固定长度还是变化?
  • 它们在 A 列和 B 列中有所不同

标签: python pandas


【解决方案1】:

你可以试试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

【讨论】:

    【解决方案2】:

    你可以使用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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-12-07
      • 1970-01-01
      • 1970-01-01
      • 2021-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多