我希望使用 pd.merge_asof 函式連接兩個資料框。此功能允許我匹配唯一 id 和/或最近的鍵上的資料。在此示例中,我匹配 id 以及小于或等于 df1 中的日期的最近日期。
有沒有辦法防止df2加入時資料被回收?
這是我目前擁有的代碼,用于回收 df2 中的值。
import pandas as pd
import datetime as dt
df1 = pd.DataFrame({'date': [dt.datetime(2020, 1, 2), dt.datetime(2020, 2, 2), dt.datetime(2020, 3, 2)],
'id': ['a', 'a', 'a']})
df2 = pd.DataFrame({'date': [dt.datetime(2020, 1, 1)],
'id': ['a'],
'value': ['1']})
pd.merge_asof(df1,
df2,
on='date',
by='id',
direction='backward',
allow_exact_matches=True)
這是我希望看到的輸出,而不是只有第一場比賽成功

uj5u.com熱心網友回復:
鑒于您的合并方向是backward,您可以在重復id和 df2date之后做一個掩碼merge_asof:
out = pd.merge_asof(df1,
df2.rename(columns={'date':'date1'}), # rename df2's date
left_on='date',
right_on='date1', # so we can work on it later
by='id',
direction='backward',
allow_exact_matches=True)
# mask the value
out['value'] = out['value'].mask(out.duplicated(['id','date1']))
# equivalently
# out.loc[out.duplicated(['id', 'date1']), 'value'] = np.nan
輸出:
date id date1 value
0 2020-01-02 a 2020-01-01 1
1 2020-02-02 a 2020-01-01 NaN
2 2020-03-02 a 2020-01-01 NaN
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/376283.html
