numpy删除值大于0的重复列

时间:2019-03-18 17:13:34

标签: python numpy

我有以下数组。

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 :(得分:0)

这将完成您想要的:

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]])

通过对列(或转置后的行)求和,可以确定哪些列包含全零,并在删除重复项之前将其过滤掉。然后,您可以重新组合它们并按索引排序以获得所需的输出。