【问题标题】:Fastest way to search dataframe with conditions使用条件搜索数据框的最快方法
【发布时间】:2020-11-17 22:35:34
【问题描述】:

我正在寻找基于特定条件搜索大型数据框的最有效方法。我尝试过 .loc、.iloc 和 numpy,但它们都太慢了。迄今为止最快的是 numpy,我的代码如下所示:

ParsedTimestamp = []

for index, row in df_primary.iterrows():

    d_index = list(np.where((df_data['filePath'] == row['FilePath']) & (df_data['session id'] == row['ChannelName']) & (df_data['message'] == row['Text']) & (df_data['d_temp'] == row['MessageTimestamp']))[0])[0]  

    ParsedTimestamp.append(df_data.loc[d_index]['Datetime UTC'])

如您所知,我有一个数据帧 (df_primary),我需要匹配来自另一个数据帧 (df_data) 的 4 个值才能找到更准确的时间戳。问题是每次搜索 df_data 中与 df_primary 中的行匹配的索引需要超过 1 秒,这太长了。 df_data 数据框大约有 250 万行。

我愿意将数据帧转换为字典或任何其他形式,但根据我的研究,我被告知字典在这种大小下效率较低。有人有什么建议吗?

【问题讨论】:

    标签: python pandas numpy dataframe search


    【解决方案1】:

    你为什么不直接合并?

    ParsedTimestamp = pd.merge(
        df_data, df_primary,
        left_on=['filePath','session id','message','MessageTimestamp','d_temp'],
        right_on=['FilePath','ChannelName','Text','MessageTimestamp']
    )['Datetime UTC']
    

    【讨论】:

      猜你喜欢
      • 2019-10-14
      • 1970-01-01
      • 2018-01-17
      • 1970-01-01
      • 2017-12-31
      • 2012-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多