Pandas перебор строк с условиям
Задача: сопоставить план и объем в заказах по колонке merge (внести в таблицу планов колонку с объемом из заказов).
План для каждого клиента ставится свой и на разных уровнях.
Например, у одного клиента может быть "год+квартал+бренд+тип бизнеса", у другого "год+квартал+код адреса доставки+бренд+тип бизнеса" и тд. Вариаций может быть много исходя из колонок в таблице Планы
Помогите в df_Orders добавить колонку merge на основе df_Plans. Чтобы для каждого клиента в Orders (KSSS_cust) в колонке merge было свое значение
Есть 2 DataFrame:
df_plans = pd.DataFrame([{'Year': 2023, 'Qtr': 1, 'Mnth': 1, 'KSSS_cust': 3514453, 'KSSS_Shipto': "", 'Brand': "ABD", 'LoB': "B2B", 'Segment': "", 'Product_group': "", 'Product_Name': "", 'Pack_group2': "", 'Production': "", 'Plan': 1500},
{'Year': 2023, 'Qtr': 1, 'Mnth': 1, 'KSSS_cust': 3485839, 'KSSS_Shipto': 3491202, 'Brand': "ABD", 'LoB': "B2C", 'Segment': "", 'Product_group': "", 'Product_Name': "", 'Pack_group2': "", 'Production': "", 'Plan': 10000}])
df_Orders = pd.DataFrame([{'Year': 2023, 'Qtr': 1, 'Mnth': 1, 'KSSS_cust': 3514453, 'KSSS_Shipto': "", 'Ord_N': 1235669, 'Product_N': 6548, 'Brand': "ABD", 'LoB': "B2B", 'Segment': "", 'Product_group': "", 'Product_Name': "", 'Pack_group2': "", 'Production': "", 'Volume': 3200},
{'Year': 2023, 'Qtr': 1, 'Mnth': 1, 'KSSS_cust': 3485839, 'KSSS_Shipto': 3491202, 'Ord_N': 2548569, 'Product_N': 85486, 'Brand': "ABD", 'LoB': "B2C", 'Segment': "", 'Product_group': "", 'Product_Name': "", 'Pack_group2': "", 'Production': "", 'Volume': 5600},
{'Year': 2023, 'Qtr': 1, 'Mnth': 1, 'KSSS_cust': 3514453, 'KSSS_Shipto': "", 'Ord_N': "", 'Product_N': 587526, 'Brand': "ABD", 'LoB': "B2B", 'Segment': "", 'Product_group': "", 'Product_Name': "", 'Pack_group2': "", 'Production': "", 'Volume': 1560}])
Код клиента = 'KSSS_cust', код адреса доставки = 'KSSS_Shipto'
Я смогла получить названия не пустых колонок в df_Plans для каждого клиента.
Не могу понять, как перебрать строки в Заказах и добавить колонку merge для каждой строки с условием совпадения названия колонок для конкретного клиента из Планов
Т.е. в обоих DataFrame должна появиться колонка merge с своим содержимым для каждого клиента:
merge в df_Plans:
- клиент1 : 2023_1_1_3514453_ABD_B2B
- клиент2 : 2023_1_1_3485839_3491202_ABD_B2C
merge в df_Orders:
- строка1+клиент1 : 2023_1_1_3514453_ABD_B2B
- строка2+клиент2 : 2023_1_1_3485839_3491202_ABD_B2C
- строка3+клиент1 : 2023_1_1_3514453_ABD_B2B
вот так я получаю названия не пустых колонок в df_Plans:
for ksss in bonus_pl_cust:
ksss = int(ksss)
cust_pl_merge = bonus_plans[(bonus_plans['KSSS_cust'] == ksss)]
nan_value = float("NaN")
cust_pl_merge.replace("", nan_value, inplace=True)
cust_pl_merge.dropna(how='all', axis=1, inplace=True)
cust_cols = list(cust_pl_merge.columns)
cust_cols = cust_cols[:-2]
Я пробовала через .apply и доп.функцию, но выдает ошибку, что элемент cust_cols не передается в функцию
for ksss in bonus_pl_cust:
ksss = int(ksss)
cust_pl_merge = bonus_plans[(bonus_plans['KSSS_cust'] == ksss)]
nan_value = float("NaN")
cust_pl_merge.replace("", nan_value, inplace=True)
cust_pl_merge.dropna(how='all', axis=1, inplace=True)
cust_cols = list(cust_pl_merge.columns)
cust_cols = cust_cols[:-2]
df['merge'] = df.apply(check_merge(cust_cols), axis=1)
def check_merge(row, cust_cols):
row['merge'] = ''
for clmn in cust_cols:
row['merge'] = row['merge'] + row[clmn]
return row['merge']