嗨,我正在尝试编写一个函数来计算半标准偏差。但是,我正在努力将比平均值小的值附加到新的数据框中进行计算。
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)
我对熊猫还很陌生,发现很难掌握!
答案 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