我想 pandas merge_asof 加入以下資料框
ll = pd.DataFrame([[pd.to_datetime('2010-01-01')], [pd.to_datetime('2010-02-01')]], columns = ['date_left'])
rr = pd.DataFrame([[pd.to_datetime('2010-01-01'), 12],
[pd.to_datetime('2010-01-01'), 6]], columns = ['date_right', 'variable'])
這是,ll:
date_left
0 2010-01-01
1 2010-02-01
和 rr:
date_right variable
0 2010-01-01 12
1 2010-01-01 6
下列
pd.merge_asof(ll, rr, left_on = 'date_left', right_on='date_right', direction='backward')
得到我
date_left date_right variable
0 2010-01-01 2010-01-01 6
1 2010-02-01 2010-01-01 6
但我想(并且期望,因為它是左連接)
date_left date_right variable
0 2010-01-01 2010-01-01 6
1 2010-01-01 2010-01-01 12
2 2010-02-01 2010-01-01 6
3 2010-02-01 2010-01-01 12
我怎樣才能達到這個結果?
---- 編輯 ----: Sammywemmy 給出了使用管理員 conditional_join 的解決方案。這適用于我上面發布的簡約示例。但是,我仍然想要其余的 merge_asof 功能。我的意思是:
ll = pd.DataFrame([[pd.to_datetime('2010-01-01')], [pd.to_datetime('2010-02-01')],[pd.to_datetime('2010-03-01')], [pd.to_datetime('2010-04-01')]], columns = ['date_left'])
ll =
date_left
0 2010-01-01
1 2010-02-01
2 2010-03-01
3 2010-04-01
和
rr = pd.DataFrame([[pd.to_datetime('2010-01-01'), 12],
[pd.to_datetime('2010-01-01'), 6],
[pd.to_datetime('2010-03-01'), 3]], columns = ['date_right', 'variable'])
rr =
date_right variable
0 2010-01-01 12
1 2010-01-01 6
2 2010-03-01 3
然后我想:
date_left date_right variable
0 2010-01-01 2010-01-01 6
1 2010-01-01 2010-01-01 12
2 2010-02-01 2010-01-01 6
3 2010-02-01 2010-01-01 12
4 2010-03-01 2010-03-01 3
5 2010-04-01 2010-03-01 3
而有條件的加入會給我:
date_left date_right variable
0 2010-01-01 2010-01-01 12
1 2010-01-01 2010-01-01 6
2 2010-02-01 2010-01-01 12
3 2010-02-01 2010-01-01 6
4 2010-03-01 2010-01-01 12
5 2010-03-01 2010-01-01 6
6 2010-03-01 2010-03-01 3
7 2010-04-01 2010-01-01 12
8 2010-04-01 2010-01-01 6
9 2010-04-01 2010-03-01 3
謝謝
uj5u.com熱心網友回復:
IIUC, pd.merge_asof,后跟 amerge就足夠了:
(pd.merge_asof(ll, rr.date_right, left_on='date_left', right_on = 'date_right')
.merge(rr, on='date_right', how = 'left')
)
date_left date_right variable
0 2010-01-01 2010-01-01 12
1 2010-01-01 2010-01-01 6
2 2010-02-01 2010-01-01 12
3 2010-02-01 2010-01-01 6
這也適用于更新的示例問題:
(pd.merge_asof(ll, rr.date_right, left_on='date_left', right_on = 'date_right')
.merge(rr, on='date_right', how = 'left')
)
date_left date_right variable
0 2010-01-01 2010-01-01 12
1 2010-01-01 2010-01-01 6
2 2010-02-01 2010-01-01 12
3 2010-02-01 2010-01-01 6
4 2010-03-01 2010-03-01 3
5 2010-04-01 2010-03-01 3
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/419759.html
標籤:
