As of writing this, the current stable release is v0.21.
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
要查找分数,请通过调用IntervalIndex.from_tuples使用pd.IntervalIndex.这应该非常快-
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
here概述了其他创建IntervalIndex的方法.
df0.to_csv('file3.csv')
这是我在这里所做的概述.
>首先,读入CSV文件
>使用pd.IntervalIndex构建间隔索引树.因此,搜索现在的复杂度是对数的.
>使用idx.get_indexer查找树中每个值的索引
>使用索引在df1中找到得分值,并将其分配回df0.请注意,我称.values,否则,分配回来时这些值将不对齐.
>将结果写回CSV
请注意,IntervalIndex是v0.20中的新功能,因此,如果您使用的是较旧的版本,请确保使用
pip install --upgrade pandas