如何在 pandas DataFrame 中找到包含行数据的行?

问题描述 投票:0回答:2

假设我有一个 pandas DataFrame:

import pandas as pd

df = pd.DataFrame({'id': [0, 2, 1], 'name': ['Sheldon', 'Howards', 'Leonard'], 'points': [10, 5, 20]})

我想在此 DataFrame 中搜索具有值

{'id': 2, 'name': 'Howards', 'points': 5}
的行。如果存在的话,我如何搜索它以从中接收索引?

我的问题来了。我有一个方法可以接收带有未知键的字典和带有未知列的数据帧。我需要在这个 DataFrame 内部进行搜索,以发现内部是否有搜索到的行...

我发现这个答案说的是一个名为 iterrows 的方法。这是查找行的最佳方法吗?代码:

import pandas as pd

df = pd.DataFrame({'c1': [10, 11, 12], 'c2': [100, 110, 120]})
df = df.reset_index()

search = {'c1': 12, 'c2': 120}
index = -1
for idx, row in df.iterrows():
    if row == search:
        index = idx

如果没有,最好的方法是什么?

python pandas dataframe find row
2个回答
1
投票

在过滤子句上使用

np.logical_and

df.index[np.logical_and(*[df[k].eq(v) for k, v in search_d.items()])]

Index([1], dtype='int64')

1
投票

使用数据框,您可以根据需要选择/过滤数据。 您可以包含所有条件,或仅包含其中一些条件。 生成的数据帧将包含符合条件的所有行。 这比使用循环更有效。

import pandas as pd
df = pd.DataFrame({'id': [0, 2, 1], 'name': ['Sheldon', 'Howards', 'Leonard'], 'points': [10, 5, 20]})
row = df[(df['id']==2) & (df['name']=='Howards') & (df['points']==5) ]
print(row)
print("index=", row.index[0])
print("id=", row.iloc[0].id)

结果是:

   id     name  points
1   2  Howards       5

index= 1
id= 2
© www.soinside.com 2019 - 2024. All rights reserved.