首页 > 解决方案 > 根据匹配条件返回下一行数据帧

问题描述

这是根据前一行中的匹配值获取下一行数据的最有效方法吗?它看起来非常繁琐,但Int64Index类型似乎玩得不好。

df_of_urls = {'ID': [100,101], 'URL': ['https://www.firsturl.com','https://www.secondurl.com']}
df_of_urls = pd.DataFrame.from_dict(df_of_urls)

prior_url = 'https://www.firsturl.com'

next_url = df_of_urls.iloc[df_of_urls[df_of_urls['URL']==prior_url ].index+1,1].values[0]

标签: pythonpandasdataframeindexingseries

解决方案


索引系列比索引数据框更有效。

# Index using iat accessor
next_url = df_of_urls['URL'].iat[np.where(df_of_urls['URL']==prior_url)[0][0] + 1]

# Index using NumPy array
next_url = df_of_urls['URL'].values[np.where(df_of_urls['URL']==prior_url)[0][0] + 1]

该算法在某些情况下效率低下。即使在数组的开头附近满足条件,也始终需要完整的迭代。手动循环可以通过在满足条件时立即终止来解决此问题。

另请参阅:有效地返回数组中满足条件的第一个值的索引


推荐阅读