так что ваши входы похожи на:
import pandas as pd
df1 = pd.DataFrame({'shape': ['A2', 'A1', 'B1', 'B1', 'A2'],
'vd_pct': [0.78, 0.33, 0.48, 0.38, 0.59]} )
df2 = pd.DataFrame({'vd_combo': ['A1_vd1', 'A1_vd2', 'A1_vd3', 'A2_vd1', 'A2_vd2', 'A2_vd3', 'B1_vd1', 'B1_vd2', 'B1_vd3'],
'combo_value':[0.38, 0.56, 0.68, 0.42, 0.58, 0.71, 0.39, 0.57, 0.69]} )
Если вы не против создания столбцов в df2 (вы можете удалить их в конце, если это проблема), вы генерируете два столбца shape
и vd
, разделяя столбец vd_combo
:
df2[['shape','vd']] = df2['vd_combo'].str.split('_',expand=True)
Затем вы можете создать функцию condition
, которую вы будете использовать в apply
, такую как:
def condition( row, df2):
# row will be a row of df1 in apply
# here you select only the rows of df2 with your conditions on shape and value
df_select = df2[(df2['shape'] == row['shape']) & (row['vd_pct'] <= df2['combo_value'])]
# if empty (your condition not met) then return vd4
if df_select.empty:
return 'vd4'
# if your condition met, then return the value of 'vd' the smallest
else:
return df_select['vd'].iloc[0]
Теперь вы можете создать свой столбец vd_type
в df1
с помощью:
df1['vd_type'] = df1.apply( condition, args =([df2]), axis=1)
df1
это как:
shape vd_pct vd_type
0 A2 0.78 vd4
1 A1 0.33 vd1
2 B1 0.48 vd2
3 B1 0.38 vd1
4 A2 0.59 vd3