簡體   English   中英

僅當一列滿足特定條件時如何合並DataFrame

[英]How to merge DataFrames only if one column meets a certain condition

假設我有一個 dataframe 'df_main':

ID   Type
1    Car
1    Truck
2    Truck

還有另一個 dataframe 'truck_data':

Truck_ID         Data
1          TruckData1
2          TruckData2

合並這兩者得到 dataframe:

   ID   Type  Truck_ID        Data
0   1    Car         1  TruckData1
1   1  Truck         1  TruckData1
2   2  Truck         2  TruckData2

當且僅當 Type == 'Truck' 時,我如何修改合並語句以僅合並卡車數據中與 ID 匹配的行?

所需的 output:

   ID   Type  Truck_ID        Data
0   1    Car         1  
1   1  Truck         1  TruckData1
2   2  Truck         2  TruckData2

當前代碼:

df_main = pd.DataFrame(columns=['ID', 'Type'], data=[[1, 'Car'], [1, 'Truck'], [2, 'Truck']])
truck_df = pd.DataFrame(columns=['Truck_ID', 'Data'], data=[[1, 'TruckData1'], [2, 'TruckData2']])
df_main = df_main.merge(truck_df, left_on='ID', right_on='Truck_ID', how='left')

concat Filter the required rows / perform merge /連接未過濾的行。

m = df_main.Type.eq('Truck')
merged_df = pd.concat([df_main.loc[~m], df_main.loc[m].merge(truck_df, left_on='ID', right_on='Truck_ID')]

OUTPUT:

   ID   Type        Data
0   1    Car         NaN
0   1  Truck  TruckData1
1   2  Truck  TruckData2

我會這樣做:

df_main.merge(truck_df.assign(Type='Truck'), on=['ID', 'Type'], how='left')

Output:

   ID   Type        Data
0   1    Car         NaN
1   1  Truck  TruckData1
2   2  Truck  TruckData2

細節:

為名為“Type”的 Truck_df assign一個臨時列,並在“ID”和“Type”上合並how='left'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM