Numpy удалить дубликаты столбцов со значениями больше 0 - PullRequest
0 голосов
/ 18 марта 2019

У меня есть следующий массив.

array([[ 0,  0,  0,  0,  0,  3],
       [ 4,  4,  0,  0,  0,  0],
       [ 0,  0,  0, 23,  0,  0]])

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

array([[ 0,  0,  0,  0,  3],
       [ 4,  0,  0,  0,  0],
       [ 0,  0, 23,  0,  0]])

Применяется только уникальноестолбцам без значений 0, т.е. все столбцы, в качестве значения которых 0 должны остаться.Также я должен убедиться, что индексы столбцов не изменились.Они остаются на своем месте.

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

np.unique(a,axis=1, return_index=True)

Но это дает мне

(array([[ 0,  0,  0,  3],
       [ 0,  0,  4,  0],
       [ 0, 23,  0,  0]]), array([2, 3, 0, 5]))

В этом результате есть две проблемы.Индексы столбцов перемещаются, а столбцы только со значениями 0 также объединяются.

1 Ответ

0 голосов
/ 18 марта 2019

Это выполнит то, что вы хотите:

import numpy as np
import pandas as pd

x = np.array([[ 0,  0,  0,  0,  0,  3],
              [ 4,  4,  0,  0,  0,  0],
              [ 0,  0,  0, 23,  0,  0]])

df = pd.DataFrame(x.T)

row_sum = np.sum(df, axis=1)

df1 = df[row_sum != 0].drop_duplicates()
df0 = df[row_sum == 0]

y = pd.concat([df1, df0]).sort_index().values.T

y

    array([[ 0,  0,  0,  0,  3],
           [ 4,  0,  0,  0,  0],
           [ 0,  0, 23,  0,  0]])

Суммируя столбцы (или строки после транспонирования), вы можете определить, какие из них содержат все нули, и отфильтровать их перед удалением дубликатов. Затем вы можете объединить их и отсортировать по индексу, чтобы получить желаемый результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...