numpy 在一个特定的列中找到唯一的值,

5ssjco0h  于 2023-01-26  发布在  其他
关注(0)|答案(3)|浏览(131)

再见。
如果我有下面的数组:

[11, "apples", 22, 11], [12, "pear", 24, 11], [13, "bannana", 18, 11], [14, "pear", 17, 11]

如何将数组更改为仅显示来自用户pear的数据?我想收集用户pear的第1列中的所有值。(12,14)
或者,我如何找到第2列中唯一的值,例如苹果、梨和香蕉。然后按pear筛选,只找到pear的数据。[12,"pear",24,11],[14,"pear",17,11]
我尝试过什么和它的各种形式:
uniqueRows = np.unique(array, axis=:,1)
如果我有唯一的值,我就可以用它来过滤。

new_arr = np.array([[11, "apples", 22, 11], [12, "pear", 24, 11], [13, "bannana", 18, 11], [14, "pear", 17, 11]])
new_val = np.array(["pear"])
result = np.in1d(new_arr[:, 1], new_val)
z = new_arr[result]
cygmwpex

cygmwpex1#

Pandas路

import numpy as np
import pandas as pd

new_arr = np.array([[11, "apples", 22, 11], [12, "pear", 24, 11], [13, "banana", 18, 11], [14, "pear", 17, 11]])

df = pd.DataFrame(new_arr,columns=['A','B','C','D'])

result = df[df.B=='pear']
print(result)
'''
    A     B   C   D
1  12  pear  24  11
3  14  pear  17  11
'''
#or

result_2 = df['B'].drop_duplicates()
print(result_2)
'''
0    apples
1      pear
2    banana
'''

然而,您可以使用unique()来代替drop_duplicate,但这种方式更快。

j8ag8udp

j8ag8udp2#

根据您的问题,使用numpy似乎不是必需的,因此这就是您使用标准列表理解的方法。
我假设输入名为data
首先,我们迭代列表中的每一项,得到每个单词的关键字

[item[1] for item in data]

这将生成单词列表(每个子数组的第二个元素)

['apples', 'pear', 'bannana', 'pear']

但是我们并不希望这个数组作为我们的结果,我们希望check这个数组来得到我们的结果,所以使用同样的for..in语法,我们可以在迭代的时候检查每一项

[item[1] for item in data if item[1] == 'pear']

让我们

['pear', 'pear']

现在我们已经过滤了所有的pear子数组,但是我们真正想要的是第一个元素(或者整个对象),这样我们就可以在for...in列表解析的开始改变我们“选择”的索引。

[item[0] for item in data if item[1] == 'pear']

这会给予我们

[12, 14]

如果确实需要整个项,则可以选择根本不对结果进行索引

[item for item in data if item[1] == 'pear']
[[12, 'pear', 24, 11], [14, 'pear', 17, 11]]
eit6fx6z

eit6fx6z3#

1.* 或者,我如何找到第2列中唯一的值,例如苹果,梨和香蕉。然后按梨过滤,只找到梨的数据。[12,"pear",24,11],[14,"pear",17,11]
我相信以上的问题,你已经自己回答了。如果我理解错了,请纠正我。
1.
如何将数组更改为仅显示来自用户pear的数据?我想收集用户pear的第1列中的所有值。(12,14)*
如果只想从第1列收集,可以转置代码创建的数组,并返回第一个数组。

new_arr = np.array([[11, "apples", 22, 11], [12, "pear", 24, 11], [13, "bannana", 18, 11], [14, "pear", 17, 11]])
new_val = np.array(["pear"])
result = np.in1d(new_arr[:, 1], new_val)
z = new_arr[result]

上面是你写的,你可以接着做:

print(z.T[0])

#If you want it in list, you can do
#print(list(z.T[0]))

输出:
数组(['12','14'],数据类型='〈U21')

相关问题