ValueError: не может переиндексировать с дублирующейся оси при конкатенации списка серий панд - PullRequest
0 голосов
/ 09 июля 2019

У меня есть список массивов numpy, и я пытаюсь объединить их в 2d матрицу следующим образом:

[arr1, arr2, arr3....] 

arr1 = [0.24, 0.24, 0.56, 0.77]
arr2 = [0.1, 0.24]
arr3 = [0.6, 0.7, 0.72, 0.88]

Вот как должен выглядеть вывод:

NaN, 0.24, 0.24, 0.56, Nan, Nan,  Nan, 0.77, Nan
0.1, 0.24,  Nan, Nan, Nan, Nan,  Nan,  Nan, Nan
Nan,  Nan,  Nan, Nan, 0.6, 0.7, 0.72,  NaN, 0.88

Я использую следующий скрипт для их объединения:

# convert to series
series = [pd.Series(arr,index=arr) for arr in arrs]

# concat with reindex
pd.concat(series, axis=1)

Но я сталкиваюсь со следующей ошибкой:

raise ValueError("cannot reindex from a duplicate axis")

ValueError: cannot reindex from a duplicate axis

Обратите внимание, что входные массивы имеют дубликаты внутри, и я быкак сохранить эти дубликаты.

Как мне исправить это?

РЕДАКТИРОВАТЬ:

учитывая обсуждение в комментариях, ошибка, скорее всего, возникает из-за дубликатов, и я надеялся найти обходной путь, который.

1 Ответ

1 голос
/ 09 июля 2019

Вот обходной путь, когда вы повторили данные, а именно, чтобы индексировать ряды по значению и порядку появления

new_arrs = []
for a in arrs:
    a = pd.Series(a)
    occurrences = a.groupby(a).cumcount()
    idx = pd.MultiIndex.from_tuples((x,y) for x,y in zip(a, occurrences ))
    a.index = idx

    new_arrs.append(a)

pd.concat(new_arrs, axis=1)

Выход:

           0     1     2
0.10 0   NaN  0.10   NaN
0.24 0  0.24  0.24   NaN
     1  0.24   NaN   NaN
0.56 0  0.56   NaN   NaN
0.60 0   NaN   NaN  0.60
0.70 0   NaN   NaN  0.70
0.72 0   NaN   NaN  0.72
0.77 0  0.77   NaN   NaN
0.88 0   NaN   NaN  0.88
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...