Python 熊猫使用部分字符串映射数据帧

Python 熊猫使用部分字符串映射数据帧,python,pandas,dataframe,Python,Pandas,Dataframe,我有两个数据帧(df,df_ref),其中后者包含一个键和值,应该映射到df 挑战在于我无法直接映射df和df_ref中的相应列,因为引用中包含的字符串仅与df中包含的字符串部分重叠 df如下所示: path filesize ctime 0 /pathA/stuff 171.0 Tue Dec 17 01:50:17 CET 2013 1 /pathB/stuff2 162.0 Tue Dec 17 01:50:17

我有两个数据帧(
df
df_ref
),其中后者包含一个键和值,应该映射到
df

挑战在于我无法直接映射
df
df_ref
中的相应列,因为引用中包含的字符串仅与
df
中包含的字符串部分重叠

df
如下所示:

    path            filesize    ctime
0   /pathA/stuff    171.0       Tue Dec 17 01:50:17 CET 2013
1   /pathB/stuff2   162.0       Tue Dec 17 01:50:17 CET 2013
2   /pathA/stuff2   156.0       Tue Dec 17 01:50:17 CET 2013
    path                            owner
0   /stuff/longer/pathA/stuff       foo
1   /stuff/longer/bla/pathB/stuff2  bar
2   /stuff/stuff/pathA/stuff2/temp  baz
df_ref
如下所示:

    path            filesize    ctime
0   /pathA/stuff    171.0       Tue Dec 17 01:50:17 CET 2013
1   /pathB/stuff2   162.0       Tue Dec 17 01:50:17 CET 2013
2   /pathA/stuff2   156.0       Tue Dec 17 01:50:17 CET 2013
    path                            owner
0   /stuff/longer/pathA/stuff       foo
1   /stuff/longer/bla/pathB/stuff2  bar
2   /stuff/stuff/pathA/stuff2/temp  baz
我想对齐列
路径上的两个数据框
,并将
所有者
df_ref
添加到
df

我目前的思路是(部分代码用于说明工作流):


我正在寻找一种避免在任何数据帧中循环的方法。

尝试
。应用

>>> df['owner'] = df['path'].apply(lambda path: df_ref.loc[df_ref['path'].str.contains(path), 'owner'].iloc[0])

输出:

>>> df
            path  filesize                         ctime owner
0   /pathA/stuff     171.0  Tue Dec 17 01:50:17 CET 2013   foo
1  /pathB/stuff2     162.0  Tue Dec 17 01:50:17 CET 2013   bar
2  /pathA/stuff2     156.0  Tue Dec 17 01:50:17 CET 2013   baz