擅长:python、mysql、java
<p>与pir的方法非常相似</p>
<pre><code>s=df.col1.diff().lt(0).cumsum()
idx=df.reset_index().groupby(s).apply(lambda x : x.set_index('col1').reindex([1,5,10],method='nearest'))['index']
df.loc[idx]
Out[19]:
col1 col2
0 1 10
3 5 23
7 11 32
8 2 23
11 6 15
13 10 32
</code></pre>
<p>另一种获取索引<code>merge_asof</code></p>
<pre><code>df['key']=s
import itertools
l=list(itertools.product(df.key.unique().tolist(),[1,5,10]))
mergedf=pd.DataFrame(l,columns=['key','col1']).astype(int)
df.col1=df.col1.astype('int32')
idx=pd.merge_asof(mergedf.sort_values('col1'),df.reset_index().sort_values('col1'),on='col1',by='key',direction ='nearest')['index']
</code></pre>