我有兩個Pandas資料框架,我需要將其合并以獲得一組雇員的完整歷史。
兩個框架都包含員工的ID和資料有效時間的時間戳。但是一個表中的時間戳有時有點 "晚",這意味著第二個資料框中的時間戳要么是on要么是after第一個資料框中的時間戳。
示例資料
import pandas as pd
df = pd.DataFrame(
{'ID': [1000, 1000, 1002, 1003, 1004] 。
'開始日期': [
pd.Timestamp('2021-01-01'/span>)。
pd.Timestamp('2021-01-01')。
pd.Timestamp('2021-04-01')。
pd.Timestamp('2021-01-01')。
pd.Timestamp('2021-01-01')
],
'Name': ['Joe', 'Bill', 'Bill', 'Martin', 'Jane']
}
)
df2 = pd.DataFrame(
{'ID': [1000, 1002, 1002, 1003, 1004] 。
'開始日期': [
pd.Timestamp('2021-01-01'/span>)。
pd.Timestamp('2021-01-01')。
pd.Timestamp('2021-04-05')。
pd.Timestamp('2021-01-01')。
pd.Timestamp('2021-01-10')
],
'Position': ['操作員', '操作員', '管理者', '操作員', '操作員']})
df = df.merge(df2, how='left', on=['ID', 'start Date'])
print(df)
輸出
。df
ID 開始日期 名稱
0 1000 202101-01 Joe
1 1000 202101-01 Bill
2 1002 2021-04-01法案
3 1003 202101-01 Martin
4 1004 2021-01-01 Jane
df2
ID 開始日期 職位
0 1000 202101-01 運營商
1 1002 2021-01-01 Operator
2 1002 202104-05 經理
3 1003 2021-01-01操作員
4 1004 2021-01-10 運營商
合并的df
ID 開始日期 名稱 職位
0 1000 202101-01 Joe Operator
1 1000 2021-01-01 比爾操作員
2 1002 2021-04-01 賬單 NaN
3 1003 2021-01-01 Martin Operator
4 1004 2021-01-01 Jane NaN
我想安排代碼,或者修改資料,以便將一個資料框中的bill和Jane的資料與另一個資料框中的移位行合并。
我想過的一些解決方案(但不知道如何去做)是:
- 將資料填充到另一個資料框中。
- 填充第二個資料框中的資料,以便在給定的日期范圍內代表所有的行(例如,確保在2021-01-02及以后的所有日期中存在 "經理 "標題的票據,以此類推,代表所有的ID)
- 交換合并命令。
- 用一個允許在第二個資料框架中 "向前尋找 "的合并命令來交換,直到它找到一個匹配。
uj5u.com熱心網友回復:
你可以用merge_asof
out = pd.merge_asof(df.sort_values('Start Date') 。
df2.sort_values('Start Date')。
by = 'ID',
on = '開始日期',
direction = 'forward')
Out[215]。
ID 開始日期 名稱 位置
0 1000 202101-01 Joe Operator
1 1000 2021-01-01 比爾操作員
2 1003 2021-01-01 Martin Operator
3 1004 2021-01-01 Jane操作員
4 1002 2021-04-01 Bill Manager
uj5u.com熱心網友回復:
我不確定我的理解是否與BENY相同,我覺得每個ID只保留最新的更有意義?
(df. merge(df2, how='left', on='ID', suffixes=('_drop', ' ')
.loc[lambda d: ~d['ID'].replicated(keep='last') ]
.drop('Start Date_drop', axis=1)
)
輸出:
ID Name Start Date Position
1 1000 Bill 202101-01 Operator
3 1002 Bill 2021-04-05 Manager
4 1003 Martin 202101-01 Operator
5 1004 Jane 2021-01-10 Operator
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/332428.html
標籤:
