![](/img/trans.png)
[英]How to apply two different functions to one column if meets the condition?
[英]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.