如何在Pandas中创建一个只选择大于平均值加/减标准差的值的行的数据框?

3
这是我目前的代码,但我不确定是否应该在计算标准差和平均值之后立即合并数据框。我当前遇到的问题是选择具有大于/小于平均值加上/减去标准差的值的行。我不知道如何逐列迭代并执行此操作?我考虑了for循环,但不太确定如何进行。
import pandas_datareader.data as web
import datetime as date

fromDate ="2014-01-02"
toDate = "2016-01-02"

dfSixMo =  web.DataReader('DGS6MO','fred',fromDate,toDate)

dfOneYear = web.DataReader('DGS1','fred',fromDate,toDate)

dfFiveYear = web.DataReader('DGS5','fred',fromDate,toDate)

dfTenYear = web.DataReader('DGS10','fred',fromDate,toDate)

dfJoin1 = dfSixMo.join(dfOneYear,how = 'inner')
dfJoin2 = dfFiveYear.join(dfTenYear,how='inner')
dfFinal = dfJoin1.join(dfJoin2,how='inner')
print(dfFinal)

mean = dfFinal.mean()
print('\nMean:')
print(mean)

StDev = dfFinal.std()
print('\n Standard Deviation:')
print(StDev)

你能分享一下样本数据吗? - Joe Ferndz
如果您想要计算整个DataFrame的标准差,可以使用df.stack().std()。同样地,df.stack().mean()可以用来计算平均值。 - Joe Ferndz
另一种方法是使用numpy选项。df.values.std(ddof=1)。更多信息请参见此处 - Joe Ferndz
1个回答

2

如果我理解正确,这就是你想要的:

#setup
df = pd.DataFrame(np.random.randint(0,10,(3,3)), columns = list('abc'))
#   a  b  c
#0  3  2  8
#1  0  6  7
#2  8  3  9

mean = df.mean()
std = df.std()

df[((mean-std < df) & (df< mean+std)).all(1)]
#   a  b  c
#0  3  2  8


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接