我有一個這樣的資料案例:
我想知道最接近給定日期的日期,但它不應超過給定日期。這是資料:
| 日期_1 | 日期_2 | 日期_3 | Given_Date |
|---|---|---|---|
| 23/12/2022 12:56:49 | 27/12/2022 11:22:32 | 2022 年 12 月 30 日 12:32:53 | 26/12/2022 13:22:39 |
| 2022 年 3 月 12 日 11:23:46 | 2022 年 5 月 12 日 13:42:12 | 2022 年 7 月 12 日 11:11:21 | 2022 年 8 月 12 日 13:15:20 |
| 15/11/2022 09:07:56 | 16/11/2022 10:37:51 | 18/11/2022 21:13:22 | 16/11/2022 13:21:23 |
我想這樣對它們進行分類:\n \n
| 日期_1 | 日期_2 | 日期_3 | Given_Date | Closest_Date |
|---|---|---|---|---|
| 23/12/2022 12:56:49 | 27/12/2022 11:22:32 | 2022 年 12 月 30 日 12:32:53 | 26/12/2022 13:22:39 | 日期_1 |
| 2022 年 3 月 12 日 11:23:46 | 2022 年 5 月 12 日 13:42:12 | 2022 年 7 月 12 日 11:11:21 | 2022 年 8 月 12 日 13:15:20 | 日期_3 |
| 15/11/2022 09:07:56 | 16/11/2022 10:37:51 | 18/11/2022 21:13:22 | 16/11/2022 13:21:23 | 日期_2 |
我如何使用 python 根據給定的表對它們進行分類?
uj5u.com熱心網友回復:
您可以轉換to_datetime,獲取到 Closest_Date 的差異,過濾日期,并獲取idxmin:
df2 = df.apply(pd.to_datetime, dayfirst=True)
df['Closest_Date'] = (df2
.filter(regex='^Date')
.rsub(df2['Given_Date'], axis=0)
.pipe(lambda d: d.mask(d.lt('0')))
.idxmin(axis=1)
)
注意。僅當需要維護原始字串時,才需要將轉換保存到新資料框中的日期時間。
輸出:
Date_1 Date_2 Date_3 \
0 23/12/2022 12:56:49 27/12/2022 11:22:32 30/12/2022 12:32:53
1 03/12/2022 11:23:46 05/12/2022 13:42:12 07/12/2022 11:11:21
2 15/11/2022 09:07:56 16/11/2022 10:37:51 18/11/2022 21:13:22
Given_Date Closest_Date
0 26/12/2022 13:22:39 Date_1
1 08/12/2022 13:15:20 Date_3
2 16/11/2022 13:21:23 Date_2
uj5u.com熱心網友回復:
另一種使用的方法pandas.merge_asof,如果沒有找到匹配項,它的優點是給出 NaN:
df2 = df.apply(pd.to_datetime, dayfirst=True)
s = (pd.merge_asof(df2['Given_Date'].reset_index().sort_values(by='Given_Date'),
df2.filter(regex='^Date').stack().sort_values()
.reset_index(name='Given_Date'),
left_by='index', right_by='level_0', on='Given_Date'
)
.set_index('level_0')['level_1']
)
df['Closest_Date'] = s
輸出:
Date_1 Date_2 Date_3 \
0 23/12/2022 12:56:49 27/12/2022 11:22:32 30/12/2022 12:32:53
1 03/12/2022 11:23:46 05/12/2022 13:42:12 07/12/2022 11:11:21
2 15/11/2022 09:07:56 16/11/2022 10:37:51 18/11/2022 21:13:22
Given_Date Closest_Date
0 26/12/2022 13:22:39 Date_1
1 08/12/2022 13:15:20 Date_3
2 16/11/2022 13:21:23 Date_2
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/496833.html
上一篇:PHP:如何找到值“2022-06-24T15:04:37.000000Z”和“2022-06-2415:05:15”之間的時間差(以秒為單位),例如使用strtotime()?
