Проблема связана с применением np.mean
к серии.Давайте рассмотрим несколько примеров:
def nok_mean(x):
return x.mean()
df.agg({'a': nok_mean})
a 13.5
dtype: float64
это работает, как и ожидалось, потому что вы используете версию среднего значения для панд, которая может быть применена к серии или фрейму данных:
df['a'].agg(nok_mean)
df.apply(nok_mean)
Давайтепосмотрим, что произойдет, когда np.mean
применяется к серии:
def nok_mean1(x):
return np.mean(x)
df['a'].agg(nok_mean1)
df.agg({'a':nok_mean1})
df['a'].apply(nok_mean1)
df['a'].apply(np.mean)
all возвращает
0 0.0
1 3.0
2 6.0
3 9.0
4 12.0
5 15.0
6 18.0
7 21.0
8 24.0
9 27.0
Name: a, dtype: float64
, когда вы применяете np.mean
к кадру данных, который работает должным образом:
df.agg(nok_mean1)
df.apply(nok_mean1)
a 13.5
b -8.0
dtype: float64
, чтобы заставить np.mean
работать должным образом с функцией, передайте ndarray для x:
def nok_mean2(x):
return np.mean(x.values)
df.agg({'a':nok_mean2})
a 13.5
dtype: float64
Я предполагаю, что все это связано с apply
, которыйВот почему df['a'].apply(nok_mean2)
возвращает ошибку атрибута.
Я предполагаю здесь в исходном коде