Pandas 的半标准差

Semi Standard Deviation in Pandas

您好,我正在尝试编写一个函数来计算半标准偏差。但是,我正在努力将小于平均值的值附加到新数据框以进行计算。

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)

我是 pandas 的新手,我发现它很难掌握!

你的函数中的问题是当你试图检索所需值的索引时。事实上,你写的是:df.index<mean_df 由于以下几个原因无法工作:

首先,mean_df 是一个 Pandas.Series 并且包含数据框所有列的均值。所以你不能将一个整数与一个系列进行比较(因为它真的没有意义)。

其次,让我们假设您的 data 是一个单独的列来删除第一点。然后你试图将你的索引与你的数据的平均值进行比较,我认为这不是你的 objective。您需要比较数据框中的值。

这是一个使用 pandas 系列的例子:

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