【问题标题】:how to get index of closets match elements in list如何获取列表中匹配元素的壁橱索引
【发布时间】:2021-06-27 17:14:37
【问题描述】:

我有两个相互关联的列表。原始列表和下采样列表。原始列表包含我所有的参考数据,下采样列表包含原始数据的小样本。它们看起来像这样:

原始列表:

original = [
 0.0,
 0.033,
 0.066,
 0.1,
 0.133,
 0.166,
 0.199,
 0.233,
 0.266,
 0.299,
 0.333,
 0.366,
 0.399,
 0.433,
 0.466,
 0.499,
 0.533,
 0.566,
 0.599,
 0.633,
 0.666,
 0.699,
 0.733,
 0.766,
 0.799,
 0.833,
 0.866,
 0.899,
 0.933,
 0.966,
 0.999,
 1.033,
 1.066,
 1.099,
 1.133,
 1.166,
 1.199,
 1.232,
 1.266,
 1.299,
 1.332,
 1.366,
 1.399,
 1.432,
 1.466,
 1.499,
 1.532,
 1.566,
 1.599,
 1.632,
 1.666,
 1.699,
 1.732,
 1.766,
 1.799,
 1.832,
 1.866,
 1.899,
 1.932,
 1.966,
 1.999,
 2.032,
 2.066,
 2.099,
 2.132,
 2.166,
 2.199,
 2.232,
 2.266,
 2.299,
 2.332,
 2.366,
 2.399,
 2.432,
 2.466,
 2.499,
 2.532,
 2.566,
 2.599,
 2.632,
 2.666,
 2.699
]

和下采样列表:

downsampled = [
0.633078,
1.632956,
2.632756
]

如何获取original 中与downsampled 中的项目完全匹配或壁橱匹配的元素的索引?

【问题讨论】:

  • 你的python版本是多少?

标签: python pandas list numpy


【解决方案1】:

在 numpy 的帮助下,使用 abs 和 argmin:

import numpy as np
def dist(d):
    return abs(d - np.array(original))
[np.argmin(dist(d)) for d in downsampled]

输出:

[19, 49, 79]

【讨论】:

    【解决方案2】:

    作为替代解决方案,我建议使用仅使用内置 pandas 方法的方法。

    您只需从列表中创建数据框

    df_original = pd.DataFrame(original, columns=['original_value']).reset_index().rename(columns={'index': 'original_index'})
    df_downsampled = pd.DataFrame(downsampled, columns=['downsampled_value']).reset_index().rename(columns={'index': 'downsampled_index'})
    

    然后,您只需使用 pandas merge_asof 执行从原始到下采样的左连接

    result = pd.merge_asof(df_downsampled, df_original, left_on=['downsampled_value'], right_on=['original_value'])
    result['original_index'].to_list()
    
    [19, 49, 79]
    

    我喜欢这种方法,因为您最终得到了完整的合并数据框,您可以使用它直接查看所选值并执行其他操作。

    【讨论】:

      猜你喜欢
      • 2012-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-03
      • 1970-01-01
      • 1970-01-01
      • 2017-10-10
      • 1970-01-01
      相关资源
      最近更新 更多