有兩個資料框,我正在嘗試與條件“合并”。
如果 df_B 的 DateTime 比 ST 的 DateTime 大不到 5 分鐘,則將 df_B 'MC' 的值添加到 df_A 的新列中。如果不是,則為空白。
df_A = {'SS': ['2022/10/23 9:58:08', '2022/10/23 9:58:08', '2022/10/23 23:07:17',
'2022/10/23 23:07:17', '2022/10/24 2:06:48', '2022/10/24 2:06:48',
'2022/10/24 5:31:44', '2022/10/24 5:31:44'],
'SC': [6764, 6764, 6778, 6778, 6782, 6782, 6787, 6787] }
df_B = {'DateTime': ['2022/10/23 6:05:51', '2022/10/23 6:06:51', '2022/10/23 7:20:51',
'2022/10/23 7:21:51', '2022/10/23 7:51:51', '2022/10/23 7:52:51',
'2022/10/24 5:31:58', '2022/10/24 5:35:58'],
'MC': [871.71, 871.77, 871.78, 871.77, 871.78, 871.77, 866.90, 866.91] }
df_A = pd.DataFrame(df_A)
df_A['SS'] = pd.to_datetime(df_A['SS'])
df_B = pd.DataFrame(df_B)
df_B['DateTime'] = pd.to_datetime(df_B['DateTime'])
期望的結果
我主要嘗試過 pd.merge_asof() 并將資料時間轉換為索引,然后將 left/right_index True 和方向“向前”。
df = pd.merge_asof(left=df_A, right=df_B, left_index=True, right_index=True,
direction='forward')
問題是合并根據方向在每一行中插入一個 MC 值。并且很少(或從不) id 得到精確的日期時間匹配)。有點放棄使用合并。
我是否應該只決議 df_A 日期時間,檢查 df_B 的日期時間是否大于 df_A 日期時間(但如果大于 5 分鐘則拒絕),然后找到相應的 MC 值?
對于這種方法,我通常會使用帶有 apply 的 lambda 函式。
df_A.apply(lambda x: (x['SS'], x['SC']), axis=1)
那么如何將df_B融入到上面,還是應該用方法呼叫一個函式,由函式來做處理呢?
希望是有道理的。
tks
uj5u.com熱心網友回復:
我知道 df_A 和 df_B 的行是對齊的,并且兩個資料幀的行數相同。
在這種情況下:
- 合并資料幀不需要將“on”列放入索引。相反,您可以使用“left_on”和“right_on”。
- 對于所需條件,使用“公差”和“前進”方向。
- 將索引重置為“索引”列,以便在合并之前按“索引”對齊行。
順便說一句,請確保在合并之前
兩個 DataFrame 都必須按 key 排序。
https://pandas.pydata.org/docs/reference/api/pandas.merge_asof.html#pandas.merge_asof
df_A.reset_index(inplace=True)
df_B.reset_index(inplace=True)
df = pd.merge_asof(df_A, df_B, left_on="SS", right_on="DateTime", by="index", direction="forward", tolerance=pd.Timedelta("5m"))
index SS SC DateTime MC
0 0 2022-10-23 09:58:08 6764 NaT NaN
1 1 2022-10-23 09:58:08 6764 NaT NaN
2 2 2022-10-23 23:07:17 6778 NaT NaN
3 3 2022-10-23 23:07:17 6778 NaT NaN
4 4 2022-10-24 02:06:48 6782 NaT NaN
5 5 2022-10-24 02:06:48 6782 NaT NaN
6 6 2022-10-24 05:31:44 6787 2022-10-24 05:31:58 866.90
7 7 2022-10-24 05:31:44 6787 2022-10-24 05:35:58 866.91
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/521368.html
標籤:Python熊猫约会时间
