python - 在两列python数据框之间的范围内搜索特定值

标签 python pandas dataframe lookup

我有两个 csv 文件。根据 csv 文件 1 中单元格的值,我应该能够在 csv 文件 2 的列中搜索该值,并从 csv 文件 2 的其他列中获取相应的值。 如果这很困惑,我很抱歉。它可能会通过插图变得清晰

CSV 文件 1

Car   Mileage
 A       8
 B       6
 C       10

CSV 文件 2

Score  Mileage(Min)    Mileage(Max)
 1       1                 3
 2       4                 6
 3       7                 9
 4       10                12 
 5       13                15 

我想要的输出 CSV 文件是这样的

Car    Mileage     Score
 A       8           3
 B       6           2
 C       10          4

汽车 A 根据其里程数 8 获得 3 分,然后在 csv 文件 2 中查看该里程数在哪个范围内,然后获得该范围内的相应分值。 任何帮助将不胜感激 提前致谢

最佳答案

As of writing this, the current stable release is v0.21.

要读取您的文件,请使用 pd.read_csv -

df0 = pd.read_csv('file1.csv')
df1 = pd.read_csv('file2.csv')

df0

  Car  Mileage
0   A        8
1   B        6
2   C       10

df1

   Score  Mileage(Min)  Mileage(Max)
0      1             1             3
1      2             4             6
2      3             7             9
3      4            10            12
4      5            13            15

要查找分数,请使用 pd.IntervalIndex通过调用 IntervalIndex.from_tuples。这应该很快 -

v = df1.loc[:, 'Mileage(Min)':'Mileage(Max)'].apply(tuple, 1).tolist()
idx = pd.IntervalIndex.from_tuples(v, closed='both') # you can also use `from_arrays`


df0['Score'] = df1.iloc[idx.get_indexer(df0.Mileage.values), 'Score'].values
df0

  Car  Mileage  Score
0   A        8      3
1   B        6      2
2   C       10      4

概述了创建 IntervalIndex 的其他方法 here .

要写入结果,请使用 pd.DataFrame.to_csv -

df0.to_csv('file3.csv')

以下是我在这里所做工作的高层次概述。

  1. 首先,读入您的 CSV 文件
  2. 使用pd.IntervalIndex 构建间隔索引。因此,搜索现在的复杂度呈对数增长。
  3. 使用idx.get_indexer找到树中每个值的索引
  4. 使用索引定位 df1 中的 Score 值,并将其分配回 df0。请注意,我调用了.values,否则,赋值回来时值会错位。
  5. 将结果写回 CSV

有关 Intervalindex 的更多信息,请查看此 SO Q/A - Finding matching interval(s) in pandas Intervalindex


请注意 IntervalIndexv0.20 中的新功能,因此如果您有旧版本,请确保使用

更新您的版本
pip install --upgrade pandas

关于python - 在两列python数据框之间的范围内搜索特定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47941113/

相关文章:

python - 嵌套字典到多索引数据帧,其中字典键是列标签

R根据先前观察到的值创建列

python - 将字典列转换为单个 pandas DataFrame

python - 如何按未排序的列表对数据框进行分组?

python - 在python中查找所有字符与其他单词匹配的单词

python - 在间隔列上对 DataFrame 进行排序

python - 如何根据包含特定值的行(在任何列中)过滤数据框

python - 按数据框中的列分组并为每个组创建单独的 csv

python - 如何从 Python 接收/获取 C 结构体

Python:转换 pandas 数据框,使索引和列 id 成为行的元素