【问题标题】:joining pandas dataframes by string prefix通过字符串前缀加入熊猫数据帧
【发布时间】:2019-03-17 13:05:22
【问题描述】:

我正在寻找一种在两个 pandas.DataFrames 上执行以下联接的有效方法:

第一个包含A 列中的字符串,例如:

A  ....

Spam|One
Spam|Two
Ham
Eggs

第二个是引用表,以字符串键为索引和文字描述:

index      description
Spam       "..."
Ham        "..." 
Eggs       "...."
BakedBeans "...."

索引中的每个键都可以是A 中字符串的前缀。现在我想将描述列连接到 A 列,其中 A 中的值与前缀匹配。我有一种感觉,它有一个高效的 p​​andas 单线......

我们可以假设A 中的所有值都具有“前缀|后缀”或“前缀”的格式。也许这可以加快速度。

【问题讨论】:

    标签: python pandas join string-matching


    【解决方案1】:

    使用Series.str.split 选择列表的第一个值和Series.map Series

    print (df1)
              A
    0  Spam|One
    1  Spam|Two
    2       Ham
    3      Eggs
    
    print (df2)  
         description
    Spam         aaa
    Ham           sd
    Eggs         rty
    
    print (df2.index)
    Index(['Spam', 'Ham', 'Eggs'], dtype='object')
    
    df1['description'] = df1['A'].str.split('|').str[0].map(df2['description'])
    print (df1)
              A description
    0  Spam|One         aaa
    1  Spam|Two         aaa
    2       Ham          sd
    3      Eggs         rty
    

    更通用的解决方案应该是Series.str.extract^ 用于提取起始字符串,join 通过| 用于正则表达式ORdf2.index

    pat = '(' + '|'.join('^' + df2.index) + ')'
    df1['new'] = df1['A'].str.extract(pat,expand=False).map(df2['description'])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-29
      • 2017-02-24
      • 2018-04-28
      相关资源
      最近更新 更多