如何使用Pandas获取 Dataframe 中某列中包含某个值的行的编号?例如,我有以下 Dataframe :
ClientID LastName 0 34 Johnson 1 67 Smith 2 53 Brows
如何找到“姓氏”列中包含“Smith”的行号?
0aydgbwb1#
df.reset_index()
若要取得符合'Smith'的所有索引
>>> df[df['LastName'] == 'Smith'].index Int64Index([1], dtype='int64')
或作为numpy数组
>>> df[df['LastName'] == 'Smith'].index.to_numpy() # .values on older versions array([1])
或者如果只有一个并且您需要整数,则可以使用子集
>>> df[df['LastName'] == 'Smith'].index[0] 1
您可以对.loc使用相同的布尔表达式,但除非您还想选择某个列,否则不需要使用该表达式,而当您只需要行号/索引时,选择该列是多余的。
.loc
de90aj5v2#
df.index[df.LastName == 'Smith']
或者
df.query('LastName == "Smith"').index
将返回LastName等于Smith的所有行索引
LastName
Smith
Int64Index([1], dtype='int64')
juud5qan3#
df.loc[df.LastName == 'Smith']
将返回行
ClientID LastName 1 67 Smith
和
df.loc[df.LastName == 'Smith'].index
将返回索引
注意:列名称“LastName”和“Last Name”甚至“lastname”是三个唯一的名称。最佳做法是首先使用df.columns检查确切的名称。如果确实需要去除列名称中的所有白色,可以首先执行以下操作
df.columns = [x.strip().replace(' ', '') for x in df.columns]
n3ipq98p4#
len(df[df["Lastname"]=="Smith"].values)
slhcrj9b5#
count_smiths = (df['LastName'] == 'Smith').sum()
avwztpqn6#
我知道这是很多年以后的事情了,但是不要在没有重新索引 Dataframe 的情况下尝试上面的解决方案。正如许多人已经指出的,在第一个问题中,你在 Dataframe 0,1,2左边看到的数字是该 Dataframe 内部的索引。当你用一个条件提取它的一个子集时,你可能会得到0,2或2,1,或2,1或2,1。0。因此,通过使用该数字(称为“索引”),您将不会获得该行在子集中的位置。您将获得该行在主 Dataframe 中的位置。用途:
np.where([df['LastName'] == 'Smith'])[1][0]
并使用字符串'Smith'来查看各种结果。其中将返回2个数组。第二个数组(索引为1)是您所关心的数组。注意:当您搜寻的值不存在时,where()会在[1][0]上传回0。当是清单的第一个值时,它也会在[1][0]上传回0。请确定您先验证是否存在。注#2:如果在[1]上的子集中多次出现与条件中相同的值,将查找包含所有出现位置的列表。如果需要,您可以使用[1]的长度进行将来的处理。
sgtfey8w7#
如果 Dataframe 的索引和行的序号不同,这里发布的大多数解决方案都将不再起作用。
In [2]: df = pd.DataFrame({"ClientID": {"A": 34, "B": 67, "C": 53}, "LastName": {"A": "Johnson", "B": "Smith", "C": "Brows"}}) In [3]: df Out[3]: ClientID LastName A 34 Johnson B 67 Smith C 53 Brows
您必须使用get_loc来存取序数数据列:
get_loc
In [4]: df.index.get_loc(df.query('LastName == "Smith"').index[0]) Out[4]: 1
如果可能存在多个满足条件的行,例如,在LastName列中找到具有'Smith' * 或 * 'Brows'的序数行编号,则可以使用列表解析:
In [5]: [df.index.get_loc(idx) for idx in df.query('LastName == "Smith" | LastName == "Brows"').index] Out[5]: [1, 2]
wdebmtf28#
您可以简单地使用shape方法df[df['LastName'] == 'Smith'].shape
df[df['LastName'] == 'Smith'].shape
输出
(1,1)个它表示1行1列。这样你就可以了解整个数据集让我来解释一下上面的代码DataframeName[DataframeName['Column_name'] == 'Value to match in column']
(1,1)
DataframeName[DataframeName['Column_name'] == 'Value to match in column']
s2j5cfk09#
如果问题中的“行号”是指实际的行号/位置(而不是索引标签)答案似乎是pandas.Index.get_loc(key, method=None, tolerance=None)(类似于:
row_number = df.index.get_loc(df.query(f'numbers == {m}').index[0])
目前的答案,除了一个,解释了如何获得索引标签,而不是行号。琐碎的代码与索引标签不对应的行号:第一个
9条答案
按热度按时间0aydgbwb1#
df.reset_index()
以及下面的建议 *若要取得符合'Smith'的所有索引
或作为numpy数组
或者如果只有一个并且您需要整数,则可以使用子集
您可以对
.loc
使用相同的布尔表达式,但除非您还想选择某个列,否则不需要使用该表达式,而当您只需要行号/索引时,选择该列是多余的。de90aj5v2#
或者
将返回
LastName
等于Smith
的所有行索引juud5qan3#
将返回行
和
将返回索引
注意:列名称“LastName”和“Last Name”甚至“lastname”是三个唯一的名称。最佳做法是首先使用df.columns检查确切的名称。如果确实需要去除列名称中的所有白色,可以首先执行以下操作
n3ipq98p4#
slhcrj9b5#
avwztpqn6#
我知道这是很多年以后的事情了,但是不要在没有重新索引 Dataframe 的情况下尝试上面的解决方案。正如许多人已经指出的,在第一个问题中,你在 Dataframe 0,1,2左边看到的数字是该 Dataframe 内部的索引。当你用一个条件提取它的一个子集时,你可能会得到0,2或2,1,或2,1或2,1。0。因此,通过使用该数字(称为“索引”),您将不会获得该行在子集中的位置。您将获得该行在主 Dataframe 中的位置。
用途:
并使用字符串'Smith'来查看各种结果。其中将返回2个数组。第二个数组(索引为1)是您所关心的数组。
注意:当您搜寻的值不存在时,where()会在[1][0]上传回0。当是清单的第一个值时,它也会在[1][0]上传回0。请确定您先验证是否存在。
注#2:如果在[1]上的子集中多次出现与条件中相同的值,将查找包含所有出现位置的列表。如果需要,您可以使用[1]的长度进行将来的处理。
sgtfey8w7#
如果 Dataframe 的索引和行的序号不同,这里发布的大多数解决方案都将不再起作用。
您必须使用
get_loc
来存取序数数据列:如果可能存在多个满足条件的行,例如,在
LastName
列中找到具有'Smith' * 或 * 'Brows'的序数行编号,则可以使用列表解析:wdebmtf28#
您可以简单地使用shape方法
df[df['LastName'] == 'Smith'].shape
输出
(1,1)
个它表示1行1列。这样你就可以了解整个数据集
让我来解释一下上面的代码
DataframeName[DataframeName['Column_name'] == 'Value to match in column']
s2j5cfk09#
如果问题中的“行号”是指实际的行号/位置(而不是索引标签)
答案似乎是pandas.Index.get_loc(key, method=None, tolerance=None)(类似于:
目前的答案,除了一个,解释了如何获得索引标签,而不是行号。琐碎的代码与索引标签不对应的行号:
第一个