我有两个 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')
以下是我在这里所做工作的高层次概述。
- 首先,读入您的 CSV 文件
- 使用
pd.IntervalIndex
构建间隔索引树。因此,搜索现在的复杂度呈对数增长。 - 使用
idx.get_indexer
找到树中每个值的索引 - 使用索引定位
df1
中的Score
值,并将其分配回df0
。请注意,我调用了.values
,否则,赋值回来时值会错位。 - 将结果写回 CSV
有关 Intervalindex
的更多信息,请查看此 SO Q/A - Finding matching interval(s) in pandas Intervalindex
请注意 IntervalIndex
是 v0.20
中的新功能,因此如果您有旧版本,请确保使用
pip install --upgrade pandas
关于python - 在两列python数据框之间的范围内搜索特定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47941113/