我有以下数组。
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
值的列。
答案 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]])
通过对列(或转置后的行)求和,可以确定哪些列包含全零,并在删除重复项之前将其过滤掉。然后,您可以重新组合它们并按索引排序以获得所需的输出。