熊猫的半标准偏差

时间:2018-08-10 12:32:10

标签: python pandas statistics quantitative-finance

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

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)

我对熊猫还很陌生,发现很难掌握!

2 个答案:

答案 0 :(得分:1)

您不必在新数据框中附加小于平均值的值。相反,您可以尝试这样的事情:

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

答案 1 :(得分:0)

函数中的问题是当您尝试检索所需值的索引时。确实,您写的是: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