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