Как вернуть значения, если один список против другого кадра данных (Панды)? - PullRequest
0 голосов
/ 09 ноября 2018
df1=pd.DataFrame({'Product_ID':["55165","80125,30215","55557","92361","32619,28965,20147","88722","82793","70809, 20201","11367"],
          'Product': ["ABC",'FDA','FSD','JGH','TYE','BVC','LKJ','HJD','POI'],
         'Country':['CN','US','GB','AG','MX','CA','DE','CA','SG']})

df2=pd.DataFrame({'Deal_ID':[70809,88722,82793,20201,55165,30215,11367]})

DF и список (deal_id) указаны выше. enter image description here

Я хотел бы вернуть информацию о стране и добавление product_id в df2. Я пытался использовать функцию соединения, но Product_ID df1 не является числовым. Есть ли решения?

Заранее спасибо за помощь.

1 Ответ

0 голосов
/ 09 ноября 2018

Вы можете сделать это за пару шагов: -

1.Выровняйте ваш агрегированный фрейм данных

Цепочка и повторите серию в зависимости от ситуации, не забывая преобразовать из str в int:

from itertools import chain
import numpy as np

split = df1['Product_ID'].str.split(',')
lens = split.map(len)

df1 = pd.DataFrame({'Country': np.repeat(df1['Country'], lens),
                    'Product': np.repeat(df1['Product'], lens),
                    'Deal_ID': list(map(int, chain.from_iterable(split)))})

2.Объединить с фреймом данных, содержащим выбранные идентификаторы Deal_ID

df2 = df2.merge(df1)

print(df2)

   Deal_ID Country Product
0    70809      CA     HJD
1    88722      CA     BVC
2    82793      DE     LKJ
3    20201      CA     HJD
4    55165      CN     ABC
5    30215      US     FDA
6    11367      SG     POI
...