【问题标题】:return next row of dataframe based on matching condition根据匹配条件返回下一行数据帧
【发布时间】:2019-04-12 08:16:11
【问题描述】:

这是根据前一行中的匹配值获取下一行数据的最有效方法吗?这看起来非常麻烦,但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]

【问题讨论】:

  • 视情况而定,您执行此操作多少次?例如,您可能会考虑使用shift 创建一列新值,每行偏移 1 个索引
  • 我没有接到list()的电话
  • 没有;不需要列表。好电话
  • 您可以在您的问题中添加一个小示例df_of_urls 数据框吗? (或者更好的是,一个完整的代码示例)
  • 我一开始就应该这样做。谢谢

标签: python pandas dataframe indexing series


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-01
    • 1970-01-01
    • 2021-10-04
    • 1970-01-01
    • 2022-08-03
    • 1970-01-01
    • 1970-01-01
    • 2021-10-03
    相关资源
    最近更新 更多