![](/img/trans.png)
[英]Merge Pandas Dataframes based on substring or partial match in another Dataframe
[英]Merge pandas DataFrames by partial match in datetime column
你好,stackoverflow 的好人。 我不能完全掌握這里的解決方案,所以請幫助我。 請記住,我是 Python 的初學者,所以請盡可能簡單。
我公司為員工提供上下班交通。 有一個系統可以跟蹤員工何時上公共汽車以及該人上哪輛公共汽車。 我們還從運輸公司接收數據,其中包含員工按照計划應該去的地點和時間的信息(每個員工都提前預訂了地點)。 有時人們不預訂地點,有時他們上錯了公共汽車(不是他們預訂的路線)或在錯誤的時間。 我的目標是找到這樣的人並提供報告。
這是我們從運輸公司收到的數據樣本
IDs DepartureTime Destination
13519 2019-12-15 16:15:00.000000 100 DefaultCity
10977 2019-12-15 16:15:00.000000 200 DefaultCity_2
13329 2019-12-15 16:15:00.000000 300 DefaultCity_3
14597 2019-12-16 16:15:00.000000 200 DefaultCity_2
16899 2019-12-16 16:15:00.000000 400 DefaultCity_4
14616 2019-12-16 16:15:00.000000 300 DefaultCity_3
12519 2019-12-17 16:15:00.000000 800 DefaultCity_8
11347 2019-12-17 16:15:00.000000 200 DefaultCity_2
這是我們從跟蹤系統收到的事實數據樣本
EmployeeID DepartureTime Destination
3027199 2019-12-15 16:12:53.000000 800 DefaultCity_8
3022569 2019-12-15 19:11:24.000000 200 DefaultCity_2
3672468 2019-12-15 16:22:46.000000 300 DefaultCity_3
3027419 2019-12-16 16:12:53.000000 800 DefaultCity_8
3045129 2019-12-16 16:11:24.000000 400 DefaultCity_4
3869438 2019-12-16 16:22:46.000000 300 DefaultCity_3
3487645 2019-12-17 16:12:53.000000 800 DefaultCity_8
3345935 2019-12-17 19:11:24.000000 200 DefaultCity_2
3235128 2019-12-17 16:22:46.000000 300 DefaultCity_3
我還有一個 SQL 表,可以幫助我將 ID 綁定到 EmployeeID
EmployeeID name IDs
3027199 Alice Doe 13519
3022569 Bob Doe 10977
3672468 Karl Doe 13329
3027419 Mark Doe 14597
3045129 Jenna Doe 16899
3869438 Victoria Doe 14616
3487645 Vladimir Doe 12519
3345935 Kenny Doe 11347
3235128 Heather Doe 14403
值得一提的是,每個工作日期都有“計划”數據,但“事實”數據沒有,因為公司只進行自發的抽查。
我做了什么:
我正在努力做的事情:
我很樂意為您提供任何可能有幫助的其他信息。 先感謝您。
您可以執行以下操作。
在下面的代碼中,第一個 df 命名為df_booking
,第二個 df 命名為df_actual
,SQL 數據庫命名為df_info
。
df_booking.rename(columns={'DepartureTime':'DepartureTime_booking', 'Destination':'Destination_booking'}, inplace=True)
df_booking = df_booking.merge(df_info, on='IDs')
df_actual.rename(columns={'DepartureTime':'DepartureTime_actual', 'Destination':'Destination_actual'}, inplace=True)
df_actual = df_actual.merge(df_info, on='EmployeeID')
df_anomoly = df_actual.merge(df_booking, on='EmployeeID', how = 'inner',suffixes=('', '_y') )
df_anomoly['diff_dest'] = np.where(df_anomoly['Destination_actual'].str.extract('(\d+)')!=df_anomoly['Destination_booking'].str.extract('(\d+)'),'Yes','No')
df_anomoly['diff_time']=np.where(pd.to_datetime(df_anomoly['DepartureTime_actual']).dt.floor("30min")!=pd.to_datetime(df_anomoly['DepartureTime_booking']).dt.floor("30min"),'Yes','No')
df_anomoly.drop(list(df_anomoly.filter(regex='_y$')), axis=1, inplace=True)
df_anomoly
print(df_anomoly)
輸出
EmployeeID DepartureTime_actual Destination_actual name IDs DepartureTime_booking Destination_booking diff_dest diff_time
0 3027199 12/15/2019 16:12 800 DefaultCity_8 Alice Doe 13519 12/15/2019 16:15 100 DefaultCity Yes No
1 3022569 12/15/2019 19:11 200 DefaultCity_2 Bob Doe 10977 12/15/2019 16:15 200 DefaultCity_2 No Yes
2 3672468 12/15/2019 16:22 300 DefaultCity_3 Karl Doe 13329 12/15/2019 16:15 300 DefaultCity_3 No No
3 3027419 12/16/2019 16:12 800 DefaultCity_8 Mark Doe 14597 12/16/2019 16:15 200 DefaultCity_2 Yes No
4 3045129 12/16/2019 16:11 400 DefaultCity_4 Jenna Doe 16899 12/16/2019 16:15 400 DefaultCity_4 No No
5 3869438 12/16/2019 16:22 300 DefaultCity_3 Victoria Doe 14616 12/16/2019 16:15 300 DefaultCity_3 No No
6 3487645 12/17/2019 16:12 800 DefaultCity_8 Vladimir Doe 12519 12/17/2019 16:15 800 DefaultCity_8 No No
7 3345935 12/17/2019 19:11 200 DefaultCity_2 Kenny Doe 11347 12/17/2019 16:15 200 DefaultCity_2 No Yes
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.