Привет, я пытаюсь написать функцию для расчета полустандартного отклонения. Однако я изо всех сил пытаюсь добавить значения меньше среднего в новый фрейм данных для расчета.
def semistand(data,start,end):
df = data.loc[(str(start)):(str(end))]
lessthan=pd.DataFrame()
mean_df= df.mean()
for ind in df.index:
if ind in df.index<mean_df:
lessthan.append(df[index])
return(mean_df,lessthan)
Я новичок в пандах, и мне довольно сложно с этим справиться!
Предоставление небольшого ввода в качестве примера, а также желаемого вывода для такого ввода поможет людям здесь помочь вам намного быстрее.
Проблема в вашей функции заключается в том, что вы пытаетесь получить индекс требуемых значений. Действительно, вы написали: df.index<mean_df
, который не может работать по нескольким причинам:
Во-первых, mean_df - это Pandas.Series
, который содержит средние значения всех столбцов вашего фрейма данных. Таким образом, вы не можете сравнивать целое число с серией (поскольку это действительно не имеет смысла).
Во-вторых, давайте предположим, что ваш data
был единственным столбцом, чтобы избавиться от первой точки. Затем вы пытаетесь сравнить свой индекс со средним значением ваших данных, что, как я полагаю, не является вашей целью. Вам нужно сравнить значения внутри вашего фрейма данных.
Вот пример использования серии панд:
my_df = pd.Series([1,3,2,4])
my_df[my_df<my_df.mean()]
0 1
2 2
dtype: int64
В противном случае, используя весь фрейм данных:
my_df = pd.DataFrame()
my_df['a'] = [1,3,2,4]
my_df['b'] = [3,1,4,2]
my_df[my_df < my_df.mean()]
a b
0 1.0 NaN
1 NaN 1.0
2 2.0 NaN
3 NaN 2.0
Вам не нужно добавлять значения меньше среднего в новый фрейм данных. Вместо этого вы можете попробовать что-то вроде этого:
import pandas as pd
values = values = [ 24, 87, 30, 73, 98, 84, 75, 21, 90, 70, 99, 83, 28, 37, 28, 79, 43, 40, 64, 41]
df = pd.DataFrame({'a':values})
df[df['a'] < df['a'].mean()]['a'].std()
7.986099033807293
Привет, добро пожаловать в SO, пожалуйста, укажите ошибку, которую вы получаете