如何在 Pandas 数据框中检查是否存在具有特定列值的行

5

我对pandas很陌生。

有没有一种方法可以检查给定的pandas数据框中是否存在具有特定列值的行。比如我有一个名为“Name”的列,我需要检查是否存在某个特定名称。

一旦我这样做了,我将需要进行类似的查询,但是要一次查询一堆值。我读到有“isin”,但我不确定该如何使用它。因此,我需要进行查询,以便我得到所有具有与名称数组中任何值匹配的“Name”列的行。


抱歉,第二部分的答案在以下链接中: https://dev59.com/uWct5IYBdhLWcg3wa87p我记得刚才好像有人回答了第一部分,但现在好像消失了。 - AMM
我发布了一个答案,但后来我想我可能误读了问题,所以我撤回了它。如果有用的话,请告诉我。 - Akavall
2个回答

9
import numpy as np
import pandas as pd
df = pd.DataFrame(data = np.arange(8).reshape(4,2), columns=['name', 'value'])

结果:

>>> df
   name  value
0     0      1
1     2      3
2     4      5
3     6      7
>>> any(df.name == 4)
True
>>> any(df.name == 5)
False

第二部分:

my_data = np.arange(8).reshape(4,2)
my_data[0,0] = 4

df = pd.DataFrame(data = my_data, columns=['name', 'value'])

结果:

>>> df.loc[df.name == 4]
   name  value
0     4      1
2     4      5

更新:

my_data = np.arange(8).reshape(4,2)
my_data[0,0] = 4

df = pd.DataFrame(data = my_data, index=['a', 'b', 'c', 'd'], columns=['name', 'value'])

结果:

>>> df.loc[df.name == 4]  # gives relevant rows
   name  value
a     4      1
c     4      5  
>>> df.loc[df.name == 4].index  # give "row names" of relevant rows
Index([u'a', u'c'], dtype=object)

你可以直接使用索引,例如 df[0] - Akavall
像这样 any(df['abc']) 吗? - AMM
我不确定abc是什么,它是一个列名吗?尽管df['name']df.name一样,但any(df['abc'])应该可行。 - Akavall
我的意思是,如果“abc”是行名称,就像我在使用基于标签的索引来访问行一样。因此,它并不是列名。 - AMM
@AMM,我更新了我的答案,也许我还是漏掉了什么,如果是这样的话,你能否构建一个简单的示例来澄清你的输入和你所寻找的输出。 - Akavall
显示剩余3条评论

1
如果你想从行标签和列标签序列中提取一组值,并且查找方法允许并返回一个numpy数组,则可以使用以下代码段及其输出:
>>> import pandas as pd
>>> import numpy as np
>>> df = DataFrame(np.random.rand(20,4), columns = ['A','B','C','D'])
>>> df
           A         B         C         D
0   0.121190  0.360813  0.500082  0.817546
1   0.304313  0.773412  0.902835  0.440485
2   0.700338  0.733342  0.196394  0.364041
3   0.385534  0.078589  0.181256  0.440475
4   0.151840  0.956841  0.422713  0.018626
5   0.995875  0.110973  0.149234  0.543029
6   0.274740  0.745955  0.420808  0.020774
7   0.305654  0.580817  0.580476  0.210345
8   0.726075  0.801743  0.562489  0.367190
9   0.567987  0.591544  0.523653  0.133099
10  0.795625  0.163556  0.594703  0.208612
11  0.977728  0.751709  0.976577  0.439014
12  0.967853  0.214956  0.126942  0.293847
13  0.189418  0.019772  0.618112  0.643358
14  0.526221  0.276373  0.947315  0.792088
15  0.714835  0.782455  0.043654  0.966490
16  0.760602  0.487120  0.747248  0.982081
17  0.050449  0.666720  0.835464  0.522671
18  0.382314  0.146728  0.666722  0.573501
19  0.392152  0.195802  0.919299  0.181929

>>> df.lookup([0,2,4,6], ['B', 'C', 'A','D'])
array([ 0.36081287,  0.19639367,  0.15184046,  0.02077381])
>>> df.lookup([0,2,4,6], ['A', 'B', 'C','D'])
array([ 0.12119047,  0.73334194,  0.4227131 ,  0.02077381])
>>>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接