У вас нет причин использовать здесь явные l oop или apply
:
def func(x, y):
df_new = df[df['a'].isin(x)]
df2 = df_new.loc[df_new['b'] <= y, df.columns[1:]]
df2.columns = ['newcolumn' + str(i) for i in range(1,6)]
df2['newcolumn6'] = y - df_new['b']
df2 = df2.astype('object') # avoid conversion of int to float with NaN
return pd.concat([df_new, df2], axis=1)
Демо:
func([100, 300], 25)
дает:
a b c d e f newcolumn1 newcolumn2 newcolumn3 newcolumn4 newcolumn5 newcolumn6
0 100 10 1 www qqq 1/1/2020 10 1 www qqq 1/1/2020 15
2 300 30 3 ttt yyy 3/1/2020 NaN NaN NaN NaN NaN NaN