У меня есть два фрейма данных (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
df_ref
выглядит следующим образом:
path owner
0 /stuff/longer/pathA/stuff foo
1 /stuff/longer/bla/pathB/stuff2 bar
2 /stuff/stuff/pathA/stuff2/temp baz
Я хочу выровнять два фрейма данных в столбце path
и добавить owner
из df_ref
в df
.
Мой текущий ход мыслей уступил (частичный код, иллюстрирующий рабочий процесс):
import pandas as pd
import numpy as np
pattern = r'^(?:\/[^\/]+){2}(\/([^\/]+\/?[^\/]+\/?){2,3})'
df_ref["partial_path"] = df_ref["path"].str.extract(pattern, expand=False)[0]
for row, data in df.iterrows():
data["owner"] = np.where(data["path"].str.contains(df_ref["partial_path"]),
df_ref["owner"], "unknown")
Я ищу подход, который позволил бы избежать циклического прохождения любого из фреймов данных.