#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, как это сделать?