簡體   English   中英

Pandas 在給定值列表的情況下查找數據框列中最接近值的索引

[英]Pandas find the index of the closest value in a data frame column given a list of values

所以我試圖找到一種矢量化的方法來做到這一點,假設我有一個數據框 DF1,它包含一個時間戳列,其中包含許多按遞增順序排列的時間戳。 我還有一個帶有目標時間的列表,我想用它來查找 DF1 中包含與該目標時間最接近的時間戳的行或該行的索引。 我有一個使用 iterrows 的解決方案,但我想知道是否有辦法在沒有 iterrows 的情況下做到這一點,因為這可能需要太長時間。

數據框中的行數始終大於目標時間值列表。 如果目標時間在兩個時間戳之間,則始終選擇最小的時間戳。

#Dataframe with timestamp
In [1]: df = pd.DataFrame([100, 150, 155, 180,185, 200], columns=['TimeStamp'])
#List of target times
targetTimes = [120, 130, 180, 187]

答案應該是:

#A list of indices
[0, 1, 3, 4]
#Or something like this
Out[1]: 
   TimeStamp
0    100
1    150
2    180
3    185 

使用merge_asof將列表轉換為一列DataFrame

df1 = pd.DataFrame(targetTimes, columns=['new'])

df = pd.merge_asof(df1, 
                   df, 
                   left_on='new', 
                   right_on='TimeStamp',
                   direction='nearest')
print (df)
   new  TimeStamp
0  120        100
1  130        150
2  180        180
3  187        185

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM