Проверьте, содержит ли строка другую строку из другого Dataframe - Python - PullRequest
0 голосов
/ 01 марта 2019

У меня есть два кадра данных с разными столбцами и размером.

Первый имеет несколько столбцов, и один из них является строковым полем (столбец 1).Второй кадр данных имеет 2 столбца, один - строковое поле (столбец 4) с двумя словами, разделенными запятыми, а другой - целочисленное поле (столбец 5).

Мне нужно проверить, что столбец 1 в кадре данных имеетслова в столбце 4 Dataframe 2 и заполните Dataframe 1 соответствующей информацией в dataframe 2.

Пример:

df1
    column 1                                column 2          column 3
0   bla bla sample1 bla bla sample2         a                 f
1   bla bla sample1 bla bla sample5         b                 g
2   bla bla sample3 bla bla sample4         c                 h
3   bla bla sample8 bla bla sample7         d                 i
4   bla bla sample1 bla bla sample2         e                 j

 df2
    column 4                       column 5
0   ('sample1', 'sample2'),        50
1   ('sample3', 'sample4'),        35 
2   ('sample1', 'sample5')         18

Мне нужен вывод:

Output:
df1
    column 1                               column 2  column 3  column 4                     column 5
0   bla bla sample1 bla bla sample2        a         f         ('sample1', 'sample2')     50
1   bla bla sample1 bla bla sample5        b         g         ('sample1', 'sample5')     18
2   bla bla sample3 bla bla sample4        c         h         ('sample3', 'sample4')     35
3   bla bla sample8 bla bla sample7        d         i         NaN        
4   bla bla sample1 bla bla sample2        e         j         ('sample1', 'sample2')     50

Есть идеи?

Спасибо!

1 Ответ

0 голосов
/ 01 марта 2019

Я не гарантирую, что это будет особенно быстро, но оно выполнит свою работу.Мы будем использовать логику set для проверки совпадений.Нам нужно перепрыгнуть через несколько обручей, чтобы мы могли сохранить список кортежей матчей.Я не думаю, что это особенно хорошая идея.

import numpy as np
import pandas as pd

df1['setc'] = df1['column 1'].str.split().apply(set)
# Initialize so addition works
df1['column 4'] = [[] for i in range(len(df1))]
df1['column 5'] = 0

for idx, row in df2.iterrows():
    m = (df1.setc.values & set(row['column 4'])) == set(row['column 4'])
    df1.loc[m, 'column 4'] += pd.Series([[row['column 4']] for x in range(len(m))])[m]
    df1.loc[m, 'column 5'] += row['column 5']

df1 = df1.drop(columns='setc')
# NaN where nothing matched
df1.loc[df1['column 4'].str.len().eq(0), ['column 4', 'column 5']] = np.NaN

Вывод:

                          column 1 column 2 column 3                                  column 4  column 5
0  bla bla sample1 sample5 sample2        a        f  [(sample1, sample2), (sample1, sample5)]      68.0
1  bla bla sample1 bla bla sample5        b        g                      [(sample1, sample5)]      18.0
2  bla bla sample3 bla bla sample4        c        h                      [(sample3, sample4)]      35.0
3  bla bla sample8 bla bla sample7        d        i                                       NaN       NaN
4  bla bla sample1 bla bla sample2        e        j                      [(sample1, sample2)]      50.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...