Как устранить ошибку: InvalidIndexError: Переиндексация действительна только для объектов индекса с уникальным значением при отображении фрейма данных в другой - PullRequest
0 голосов
/ 28 марта 2020

У меня есть Pandas DataFrame. Я пытаюсь сопоставить ProductID от одного dataframe к другому dataframe.

Вот моя попытка:

Product_id_mapper = dict(df1[['ProductID', 'Cost']].drop_duplicates().values)

df2["Actual_cost"] = df2['ProductID'].map(Product_id_mapper)

К сожалению, я получаю следующую ошибку:

InvalidIndexError: Reindexing only valid with uniquely valued Index objects

Интересно, почему я продолжаю получать эту ошибку даже после удаления дубликатов

1 Ответ

0 голосов
/ 28 марта 2020

Если я правильно понял, вы хотите объединить на основе Key двух кадров данных. Тогда это мое предложение:

Предположим, a.csv:

carrier,type,count
DTH,a,123
DTH,b,3123
DTH,c,41341
DTH,d,13411
BLUEDART,a,12123
BLUEDART,b,31231
BLUEDART,c,411
BLUEDART,d,11

И b.csv это:

carrier,year
DTH,1997
BLUEDART,2005

Python код:

import pandas as pd

a_df = pd.read_csv(r"a.csv")
b_df = pd.read_csv(r"b.csv")

merged_df = pd.merge(a_df, b_df, on=['carrier'])
print(merged_df)

и вывод:

    carrier type  count  year
0       DTH    a    123  1997
1       DTH    b   3123  1997
2       DTH    c  41341  1997
3       DTH    d  13411  1997
4  BLUEDART    a  12123  2005
5  BLUEDART    b  31231  2005
6  BLUEDART    c    411  2005
7  BLUEDART    d     11  2005

Если имя столбца Key по-разному вызывается в CSV, используйте:

out = (df1.merge(df2, left_on='key1', right_on='key2')
          .reindex(columns=[...]))
...