我想做一個內部連接(合并)df1:
mandant fk_lart_nr fk_ust_sch
7 55 43
00 55 43
和df2:
mandant ust_sch ust_bez
0 59 Gutschrift 19 %
18 3 Rechnung 0 %
我想使用兩個連接條件。第一個總是固定的。
第一個加入條件是固定的 df1.fk_ust_sch = df2.ust_sch
但是,應該根據 df1.mandant 的值使用第二個連接條件。
- 如果 df1.mandant 是 7 或 18 ( .isin([7,18]) ),則第二個連接條件應該是:
df1.mandant = df2.mandant
- 如果 df1.mandant 不是 7 或 18,則使用 df2 的第二個連接條件應該是:
df2.mandant == '00'
df_merged = df1.merge(df2, left_on=['fk_ust_sch'],
right_on=['ust_sch'],
how='inner', suffixes=('_df1', '_df2'))
uj5u.com熱心網友回復:
由于您不能在 期間指定連接條件.merge(),您可以做的是用您需要的條件過濾合并結果,如下所示:
案例 1:如果您的mandant欄位是整數型別:
# Reuse your codes for merge
df_merged = df1.merge(df2, left_on='fk_ust_sch',
right_on='ust_sch',
how='inner', suffixes=('_df1', '_df2'))
# Filter
m1 = df_merged.mandant_df1.isin([7,18]) & (df_merged.mandant_df1 == df_merged.mandant_df2)
m2 = ~df_merged.mandant_df1.isin([7,18]) & (df_merged.mandant_df2 == 0) ## use 0 instead of '00'
df_merged_filtered = df_merged.loc[m1 | m2]
案例 2:如果您的mandant欄位是字串型別:
# Reuse your codes for merge
df_merged = df1.merge(df2, left_on='fk_ust_sch',
right_on='ust_sch',
how='inner', suffixes=('_df1', '_df2'))
# Filter
### Put 7, 18 in quotes as '7', '18'
m1 = df_merged.mandant_df1.isin(['7','18']) & (df_merged.mandant_df1 == df_merged.mandant_df2)
m2 = ~df_merged.mandant_df1.isin(['7','18']) & (df_merged.mandant_df2 == '00')
df_merged_filtered = df_merged.loc[m1 | m2]
演示
豐富您的示例資料以包含所有必需的測驗用例:
(演示使用案例 1,您的mandant欄位為整數型別)
輸入資料
df1
mandant fk_lart_nr fk_ust_sch
0 7 55 43
1 0 55 43
2 10 55 43
df2
mandant ust_sch ust_bez
0 0 59 Gutschrift 19 %
1 6 43 Gutschrift 21 %
2 7 43 Gutschrift 30 %
3 0 43 Gutschrift 50 %
4 18 3 Rechnung 0 %
結果:
print(df_merged_filtered)
mandant_df1 fk_lart_nr fk_ust_sch mandant_df2 ust_sch ust_bez
1 7 55 43 7 43 Gutschrift 30 %
5 0 55 43 0 43 Gutschrift 50 %
8 10 55 43 0 43 Gutschrift 50 %
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/315218.html
