сопоставить один столбец в df с другим df, где присутствуют все слова - PullRequest
2 голосов
/ 04 июня 2019

Я пытаюсь сопоставить столбец с фреймом данных из другого фрейма данных, где все слова существуют из целевого фрейма данных

многократные совпадения хороши, так как я могу отфильтровать их после.Заранее спасибо!

df1
ColA
this is a sentence
with some words
in a column
and another
for fun

df2
ColB        ColC
this a      123
in column   456
fun times   789

Некоторые попытки

dfResult = df1.apply(lambda x: np.all([word in x.df1['ColA'].split(' ') for word in x.df2['ColB'].split(' ')]),axis = 1)

dfResult = df1.ColA.apply(lambda sentence: all(word in sentence for word in df2.ColB))

желаемый вывод


dfResult
ColA                 ColC
this is a sentence   123
with some words      NaN
in a column          456
and another          NaN
for fun              NaN

Ответы [ 2 ]

3 голосов
/ 04 июня 2019

Перейдите на set и найдите подмножества с широковещательной рассылкой Numpy

Отказ от ответственности: Нет никаких гарантий, что это будет быстро.

A = df1.ColA.str.split().apply(set).to_numpy()  # If pandas version is < 0.24 use `.values`
B = df2.ColB.str.split().apply(set).to_numpy()  # instead of `.to_numpy()`
C = df2.ColC.to_numpy()

# When `dtype` is `object` Numpy falls back on performing
# the operation on each pair of values.  Since these are `set` objects
# `<=` tests for subset.
i, j = np.where(B <= A[:, None])
out = pd.array([np.nan] * len(A), pd.Int64Dtype())  # Empty nullable integers
# Use `out = np.empty(len(A), dtype=object)` if pandas version is < 0.24
out[i] = C[j]

df1.assign(ColC=out)

                 ColA  ColC
0  this is a sentence   123
1     with some words   NaN
2         in a column   456
3         and another   NaN
4             for fun   NaN
1 голос
/ 04 июня 2019

Используя цикл и set.issubset

pd.DataFrame([[y if set(z.split()).issubset(set(x.split())) else np.nan for z,y in zip(df2.ColB,df2.ColC)] for x in df1.ColA ]).max(1)
Out[34]: 
0    123.0
1      NaN
2    456.0
3      NaN
4      NaN
dtype: float64
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...