假设我有一个 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
如果没有,最好的方法是什么?
np.logical_and
:
df.index[np.logical_and(*[df[k].eq(v) for k, v in search_d.items()])]
Index([1], dtype='int64')
使用数据框,您可以根据需要选择/过滤数据。 您可以包含所有条件,或仅包含其中一些条件。 生成的数据帧将包含符合条件的所有行。 这比使用循环更有效。
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