假设我有一个 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