在数据帧2中搜索数据帧1的值并计算出现次数

时间:2017-12-05 04:37:51

标签: python pandas

我有两个数据框如下: 数据框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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

使用replace两次和value_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)']})