Добавьте столбец, если значение находится в другом столбце другого фрейма данных

#python #pandas #dataframe #apply #isin

Вопрос:

Одним из моих фреймов данных является:

      name    value
0    Harry     a
1    Kenny     b
2    Zoey      h
 

другой-это:

      list                    topic
0    Jame, Harry, Noah      topic1
1    lee, zee               topic2  
 

Я хочу, чтобы, если какое-либо из имен dataframe1 находится в списке dataframe2, оно должно добавить столбец имени «присутствует» в dataframe1 со значениями по состоянию на соответствующую тему.

      name    value   present
0    Harry     a      topic1
1    Kenny     b       none
2    Zoey      h       none
 

ОБНОВЛЕННЫЙ ЗАПРОС

df1

      name        value
0    Harry Lee     a
1    Kenny         b
2    Zoey          h
 

df2 такой же, и желаемый результат

      name    value   present
0 Harry Lee    a      topic1 topic2
1    Kenny     b       none
2    Zoey      h       none
 

Ответ №1:

Нам нужно обрезать df1, explode тогда мы сможем сделать map

 df1['list'] = df1['list'].str.split(',')
s = df1.explode('list')
df['present'] = df.name.map(dict(zip(s['list'],s['topic'])))
df
Out[550]: 
    name value present
0  Harry     a  topic1
1  Kenny     b     NaN
2   Zoey     h     NaN
 

Комментарии:

1. Объект «Фрейм данных» не имеет атрибута «взрыв», это ошибка, с которой я сталкиваюсь

2. @TanishkaBansal обновление вашей панды поможет

3. Кроме того, что делать , если df1 имеет такое же значение, как Гарри Ли, и желаемым результатом в настоящем времени должна быть тема 1 тема 2, как это сделать?

Ответ №2:

 import pandas as pd
import numpy as np

df1 = pd.DataFrame({"name":['Harry', 'Kenny', 'Zoey'], "value":["a", "b", "h"]})
df2 = pd.DataFrame({"list": ["Jame, Harry, Noah", "lee, zee"], "topic": ["topic1", "topic2"]})

def add_column(x):
    try:
        present = df2[df2['list'].str.contains(x)].iloc[0,1]
    except IndexError:
        present = np.NAN
    return present
df1['present'] = df1['name'].apply(add_column)
 

Комментарии:

1.Кроме того, что делать , если df1 имеет такое же значение, как Гарри Ли, и желаемым результатом в настоящем времени должна быть тема 1 тема 2, как это сделать?