Pandas: InvalidIndexError: переиндексация действительна только для объектов индекса с уникальным значением - PullRequest
0 голосов
/ 17 мая 2018

У меня есть два Dataframes, которые хранят данные о продуктах, закупленных в магазине.df1 хранит данные о названии магазина, идентификаторе товара, названии товара и дате совершения покупки.df2 хранит данные об идентификаторе продукта, названии продукта и типе.Я пытаюсь обновить df2 с помощью значения Дата получения в df1, но только для продуктов типа P.

. Ниже приведены виды данных и того, что я пытался сделать.

df1:

StoreName,ProdId,ProdName,DateReceived
Store A,P1,Prod1,2018-05-01
Store A,P2,Prod2,2018-05-02
Store B,P1,Prod1,2018-05-04

df2:

DateRecived,ProdId,ProdName,Type

,P1,Prod1,P
,P2,Prod2,P
,P3,Prod3,S

Скрипт:

df2['DateRecived'] = df2['ProdId'].map(df1.set_index('ProdId')['StoreName']).df2['Type'] == 'P'

При выполнении этой команды выдается следующая ошибка:

InvalidIndexError: Reindexing only valid with uniquely valued Index objects

Может ли кто-нибудь помочь мне изменить скрипт, чтобы я мог отфильтровать значение по Store Name и Prod Name и получить df2, заполненное значением DateReceived.Спасибо.

1 Ответ

0 голосов
/ 17 мая 2018

Проблема с дубликатами - P1 Товар дважды:

s = df1.set_index('ProdId')['StoreName']
print (s)

ProdId
P1    Store A
P2    Store A
P1    Store B
Name: StoreName, dtype: object

Так нужны уникальные значения, drop_duplicates оставьте только первое значение:

s = df1.drop_duplicates('ProdId').set_index('ProdId')['StoreName']
print (s)
ProdId
P1    Store A
P2    Store A
Name: StoreName, dtype: object

И тогда возможен ответ по логической маске:

mask = df2['Type'] == 'P'
df2['DateRecived'] = df2['DateRecived'].mask(mask, df2['ProdId'].map(s))
print (df2)
  DateRecived ProdId ProdName Type
0     Store A     P1    Prod1    P
1     Store A     P2    Prod2    P
2         NaN     P3    Prod3    S

df2.loc[mask, 'DateRecived'] = df2.loc[mask, 'ProdId'].map(s)
print (df2)
  DateRecived ProdId ProdName Type
0     Store A     P1    Prod1    P
1     Store A     P2    Prod2    P
2         NaN     P3    Prod3    S
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...