亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

根據最接近的小時和日期選擇行

根據最接近的小時和日期選擇行

蝴蝶刀刀 2023-12-05 15:21:50
我有兩種數據,一種是數據幀,一種是現在許多列表包含有關圖像采集時間的數據,因此數據如下所示:pandas 數據框(日期和時間為 23/6 -04/07,每天 07:00-17:00):>>>timestamp                    date             hour        person_1   person_2 ............0 2019-06-23 07:00:00          2019-06-23       07:00:00     0.124      0.4311 2019-06-23 07:03:00          2019-06-23       07:03:00     0.131      0.4382 2019-06-23 07:06:00          2019-06-23       07:06:00     0.154      0.4333 2019-06-23 07:09:00          2019-06-23       07:09:00     0.164      0.441....2 2019-07-04 16:57:00          2019-07-04       16:57:00     0.864      0.6753 2019-07-04 17:00:00          2019-07-04       17:00:00     0.823      0.631每張圖像拍攝的時間以列表的格式(“小時”一詞后面的數字代表日期):#Hours that the image was takenHours23=['07:00','08:00','09:32','10:14','11:15','12:17','13:03','14:41','15:04','17:05']Hours24=['07:00','08:13','09:02','10:09','11:02','12:03','14:09','16:00','17:00']Hours25=['08:15','09:02','10:02','11:02','12:02','14:02','15:02','16:00','17:00']...Hours3=['07:00','08:02','09:02','10:02','11:02','12:02','13:03','14:03','15:02','16:01','17:00']Hours4=['07:15','08:02','12:02','13:03']我想根據這些小時列表選擇數據框中的行,例如,選擇最接近圖像的小時的行。例如,對于 23/6,圖像的第一個小時是 07:00,然后是 08:00,然后是 09:32...所以我想在我的數據框中僅包含該時間最接近的行到圖像小時。我看到有多種方法可以過濾它,正如這里提到的(在 Pandas 中查找最接近給定時間的 DataFrame 行),但我想考慮到每個日期都有不同的時間這一事實。所以結果應該是這樣的:>>>timestamp                    date             hour        person_1   person_2 ............0 2019-06-23 07:00:00          2019-06-23       07:00:00     0.124      0.4311 2019-06-23 08:01:00          2019-06-23       07:00:00     0.108      0.3701 2019-06-23 09:32:00          2019-06-23       07:00:00     0.101      0.360...
查看完整描述

1 回答

?
蝴蝶不菲

TA貢獻1810條經驗 獲得超4個贊

您的時間列表不是一種理想的格式,因此我將向您展示一個日期的方法,其中數據框h23是手動構建的。如果需要,您可以對其進行編碼以構建一個包含所有時間的數據框。


基本前提是制作一個數據框h23,例如包含照片的所有時間戳。使用它與 df 時間戳合并,使用pd.merge_asof它可以進行最接近的時間匹配。 nearest意味著實際時間可以是之前或之后,但是如果時間需要是事件之前的最近時間,則還有 和 的backward選項。forward


import pandas as pd


df = pd.DataFrame({'timestamp': {0: '2019-06-23 07:00:00',

  1: '2019-06-23 07:03:00',

  2: '2019-06-23 07:06:00',

  3: '2019-06-23 07:09:00'},

 'date': {0: '2019-06-23', 1: '2019-06-23', 2: '2019-06-23', 3: '2019-06-23'},

 'hour': {0: '07:00:00', 1: '07:03:00', 2: '07:06:00', 3: '07:09:00'},

 'person_1': {0: 0.124, 1: 0.131, 2: 0.154, 3: 0.16399999999999998},

 'person_2': {0: 0.431, 1: 0.43799999999999994, 2: 0.433, 3: 0.441}})


df['timestamp'] = pd.to_datetime(df['timestamp'])


Hours23=['07:00','08:00','09:32','10:14','11:15','12:17','13:03','14:41','15:04','17:05']


h23 = pd.DataFrame({'Time':Hours23, 'Day':'2019-06-23'})


h23['timestamp'] = pd.to_datetime(h23['Day'] + " " + h23['Time'])


pd.merge_asof(h23,df, on='timestamp', direction='nearest').drop(columns=['Day','Time'])

輸出


              timestamp      date       hour    person_1    person_2

0   2019-06-23 07:00:00 2019-06-23  07:00:00    0.124   0.431

1   2019-06-23 08:00:00 2019-06-23  07:09:00    0.164   0.441

2   2019-06-23 09:32:00 2019-06-23  07:09:00    0.164   0.441

3   2019-06-23 10:14:00 2019-06-23  07:09:00    0.164   0.441

4   2019-06-23 11:15:00 2019-06-23  07:09:00    0.164   0.441

5   2019-06-23 12:17:00 2019-06-23  07:09:00    0.164   0.441

6   2019-06-23 13:03:00 2019-06-23  07:09:00    0.164   0.441

7   2019-06-23 14:41:00 2019-06-23  07:09:00    0.164   0.441

8   2019-06-23 15:04:00 2019-06-23  07:09:00    0.164   0.441

9   2019-06-23 17:05:00 2019-06-23  07:09:00    0.164   0.441


查看完整回答
反對 回復 2023-12-05
  • 1 回答
  • 0 關注
  • 157 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號