根据python中的多个列标准减小数组的大小

时间:2016-02-13 14:23:00

标签: python numpy

我需要根据另一个数组中的条件减小数组的大小;我需要调查关系并根据新信息更改值。这是我的问题的简化版本。

我有一个包含数据的数组(或数据框):

data = np.array([[[[1, 2, 3, 4], [5, 6, 7, 8]]]]).reshape((4,2))

我有另一个不同大小的文件,它保存有关数据数组中值的信息:

a = np.array([[1, 1, 2],[2, 3, 4],[3, 5, 6], [4, 7, 8]  ]).reshape((4,3))

我在a中提供的信息告诉我如何减少数据的大小,例如a[0]告诉我data[0][0:2] == a[0][1:]

所以我可以用a[0][0:1]替换唯一值data[0][0:2](有效减少数组数据的大小

为了澄清,数组a每个位置保存三条信息,a [0]有信息1,1,2 - 现在我想扫描数据数组,当a [i] [1:]时等于任何数据[i] [0:2]或data [i] [2:]然后我想用a [i] [0:1]替换该值 - 是否更清晰?

我的最终数组应该是这样的:

new_format = np.array([[[[1, 2], [3,4]]]]).reshape((2,2))

有以下问题:Filtering a DataFrame based on multiple column criteria 但仅基于基于某些数字标准的过滤。

1 个答案:

答案 0 :(得分:0)

我找到了一种使用pandas库的方法。可能不是最好的解决方案,但是我的工作。 在我的情况下,我读取了pandas库中的数据,但是对于发布的示例,我可以将数组转换为数据帧

datas = pd.DataFrame(data) ##convert to dataframe
az = pd.DataFrame(a)
datas= datas.rename(columns={'0': '1', '1': '2'}) ## rename columns for comparison with a array
new_format= pd.merge(datas, az, how='right') #do the comparison

new_format = new_format.drop(['1','2'],1) #drop the old columns, keeping only the new format