我有两个数据框如下: 数据框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
答案 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)']})