【问题标题】:search data frame 1 values in data frame 2 and count the occurrence在数据框 2 中搜索数据框 1 的值并计算出现次数
【发布时间】:2018-05-18 16:12:31
【问题描述】:

我有两个数据框如下: 数据框df1(一列):

names
alpha beta
test1 test2
abc def

和数据框df2(也是一列):

names
alpha beta (abc)
abc def d
abc def (xyz)
test1 test2
test1 test2 (a)
alpha beta d
alpha beta (1)
alpha beta (2)

我想要这样的输出,这样代码将在 df2 中搜索 df1 值并计算这些值的出现次数以显示如下输出。

所需的输出数据框(两列):

names          occurrence
alpha beta         4
test1 test2        2
abc def            2

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    你可以使用str.extract + value_counts -

    p = '(' + df1.names.str.cat(sep='|') + ')'
    df2.names.str.extract(p, expand=False).value_counts()
    
    alpha beta     4
    abc def        2
    test1 test2    2
    Name: names, dtype: int64
    

    如果给定行可能出现多个匹配,您可以改用extractall -

    df2.names.str.extractall(p).iloc[:, 0].value_counts()
    
    alpha beta     4
    abc def        2
    test1 test2    2
    Name: 0, dtype: int64
    

    【讨论】:

      【解决方案2】:

      使用两次replacevalue_counts

      df1['name'].replace(df['names'].reset_index().set_index('names')['index'].to_dict(),regex=True).replace(df['names'].to_dict()).value_counts()
      Out[268]: 
      alpha beta     4
      abc def        2
      test1 test2    2
      Name: name, dtype: int64
      

      数据输入

      df = pd.DataFrame({'names':['alpha beta','test1 test2','abc def']})
      
      df1=pd.DataFrame({'name':['alpha beta (abc)','abc def d','abc def (xyz)','test1 test2','test1 test2 (a)','alpha beta d','alpha beta (1)','alpha beta (2)']})
      

      【讨论】:

      • 啊,你修正了输入!我想知道为什么我得到 4 2 1 而不是 4 2 2。
      • @cᴏʟᴅsᴘᴇᴇᴅ 我认为应该有错字...如果不是,我认为我们需要在这里进行一些模糊匹配..
      • 99% 确定这是一个错字,除非 OP 澄清 ;-)
      • 谢谢!这正是我一直在寻找的。​​span>
      • @Anand yw~:-) 祝你有美好的一天
      猜你喜欢
      • 2019-08-31
      • 1970-01-01
      • 2021-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-22
      • 1970-01-01
      相关资源
      最近更新 更多