【问题标题】:query pandas dataframe using list with repeated index values and collect repeated output使用具有重复索引值的列表查询 pandas 数据框并收集重复输出
【发布时间】:2020-10-16 22:34:43
【问题描述】:

我有一个索引值列表。列表中的值可以重复多次。

index_list = [1,3,4,3,2,20,55,30,45]

我想查询pandas dataframe 并提取索引与index_list 中的值匹配的值

  • 如果同一个索引出现多次,我想多次提取该值。
  • 所选值的顺序必须与 index_list 的顺序一致。

index_list 可以很长(100000)而 df 很小(400 行,2 列)

我使用的解决方案是基于循环的:

all_selected_values = []
for idx in index_list:
  all_selected_values.append(df.loc[df.index == idx,'selected_column'].values[0])

这可行,但可能会很慢。

有没有更有效的方法?
谢谢!

【问题讨论】:

    标签: python pandas dataframe data-science


    【解决方案1】:

    Pandas 的方式是在 loc 中传递索引列表并解析您想要的系列,然后转换为列表:

    all_selected_values2=df.loc[index_list,'selected_column'].tolist()
    

    示例数据框大小:(11000,1):

    np.random.seed(1)
    index_list = np.random.randint(0,11000,1000) #1000 values
    df = pd.DataFrame(np.random.randint(0,100,(11000,1)),columns=['selected_column'])
    

    验证:

    all_selected_values = []
    for idx in index_list:
        all_selected_values.append(df.loc[df.index == idx,'selected_column'].values[0])
    
    all_selected_values2=df.loc[index_list,'selected_column'].tolist()
    
    print(all_selected_values == all_selected_values2)
    True
    

    比较:

    %%timeit
    all_selected_values1 = []
    for idx in index_list:
        all_selected_values.append(df.loc[df.index == idx,'selected_column'].values[0])
    197 ms ± 9.04 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
    
    %%timeit
    all_selected_values2=df.loc[index_list,'selected_column'].tolist()
    415 µs ± 29.3 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-01
      • 2015-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-12
      • 1970-01-01
      相关资源
      最近更新 更多