Вы получаете ошибки, потому что добавили ,*d
к предоставленному вами исходному решению.
# the way you rewrote it
a,b,c,*d= df.apply(lambda row: make_count([row['Std_1'], row['Std_2'], row['Std_3']], row['Mean of Std']), axis=1)
df['greater'], df['less'], df['count'] = a, b, c
# the code you were provided
a, b, c = df.apply(lambda row: make_count([row['Std_1'], row['Std_2'], row['Std_3']], row['Mean']), axis=1)
df['greater'], df['less'], df['count'] = list(zip(a, b, c))
Решение, которое вы здесь предоставили ссылка на свой предыдущий вопрос
Кроме того:
оригинальное решение, которое вам было дано, является самым быстрым решением:
%timeit(apply_make_count(df))
1.93 ms ± 279 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
новые решения:
def test():
df['greater'] = (df.iloc[:, 1:4].values > df[['Mean']].values).sum(axis=1)
df['less'] = (df.iloc[:, 1:4].values < df[['Mean']].values).sum(axis=1)
df['count'] = df.iloc[:, 1:4].count(1)
%timeit(test())
2.6 ms ± 35.2 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
def test2():
sub_df = df[['Std_1', 'Std_2', 'Std_3']]
df['greater'] = sub_df.gt(df.Mean.values).sum(1) # same as (sub_df > df.Mean.values).sum(1)
df['less'] = sub_df.lt(df.Mean.values).sum(1)
df['count'] = sub_df.count(1)
%timeit(test2())
2.82 ms ± 263 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)