gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 14:02:14 25 4
gpt4 key购买 nike

我有两个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com