Полустандартное отклонение в пандах

Привет, я пытаюсь написать функцию для расчета полустандартного отклонения. Однако я изо всех сил пытаюсь добавить значения меньше среднего в новый фрейм данных для расчета.

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)

Я новичок в пандах, и мне довольно сложно с этим справиться!

Привет, добро пожаловать в SO, пожалуйста, укажите ошибку, которую вы получаете

Yuca 10.08.2018 14:36

Предоставление небольшого ввода в качестве примера, а также желаемого вывода для такого ввода поможет людям здесь помочь вам намного быстрее.

ibarrond 10.08.2018 15:00
0
2
1 893
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Проблема в вашей функции заключается в том, что вы пытаетесь получить индекс требуемых значений. Действительно, вы написали: 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

Другие вопросы по теме