Эффективный способ преобразования массива двух измерений в список без дубликатов - PullRequest
0 голосов
/ 21 февраля 2019

Я хочу извлечь значения из двух разных столбцов кадра данных pandas, поместить их в список без повторяющихся значений.

Я пробовал следующее:

arr = df[['column1', 'column2']].values
thelist= []
    for ix, iy in np.ndindex(arr.shape):
        if arr[ix, iy] not in thelist:
            thelist.append(edges[ix, iy])

Это работает, но это занимает слишком много времени.Кадр данных содержит около 30 миллионов строк.

Пример:

  column1 column2 
1   adr1   adr2   
2   adr1   adr2   
3   adr3   adr4   
4   adr4   adr5   

Должен генерироваться список со значениями:

[adr1, adr2, adr3, adr4, adr5]

Можете ли выПожалуйста, помогите мне найти более эффективный способ сделать это, учитывая, что фрейм данных содержит 30 миллионов строк.

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

Вы можете использовать только np.unique(df) (возможно, это самая короткая версия).

Формально, первый параметр np.unique должен быть array_like объект, но, как я проверилВы также можете передать только DataFrame .

Конечно, если вы хотите просто список , а не ndarray , напишите np.unique(df).tolist().

Редактировать после вашего комментария

Если вы хотите, чтобы список уникален , но в порядке , напишите:

pd.DataFrame(df.values.reshape(-1,1))[0].drop_duplicates().tolist()

Порядок операций:

  • reshape изменяет исходный массив на один столбец.
  • Затем создается DataFrame с именем столбца по умолчанию =0.
  • Затем [0] берет только этот (единственный) столбец.
  • drop_duplicates действует именно так, как говорится в названии.
  • И последний шаг:tolist преобразуется в простой список .
0 голосов
/ 21 февраля 2019

@ ALollz дал правильный ответ.Я продолжу оттуда.Чтобы преобразовать в список, как ожидается, просто используйте list(np.unique(df.values))

...