这是基于前一行中的匹配值获取下一行数据的最有效方法吗?似乎很麻烦,但是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]
答案 0 :(得分:1)
索引系列比索引数据帧更有效。
# 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]
在某些情况下,该算法效率不高。即使在数组开头附近满足条件,也总是需要完整的迭代。手动循环可以通过在满足条件时立即终止来解决此问题。
另请参阅:Efficiently return the index of the first value satisfying condition in array。