我有包含的100只股票篮子每小时回报数据帧。有一件事我目前计算为每股票每小时的平均回报,然后取这个数字的滚动MA。因此,我通过100总结每一行,并划分,做滚动平均值之前。可以说,东风看起来像这样的例子:
Time Stock 1 Stock 2 Stock 3 Stock 4 ... Stock 100
09:00 0.25 0.14 0.07 0.31 0.12
10:00 0.05 0.01 -0.03 0.18 0.09
11:00 -0.11 -0.17 0.01 -0.04 -0.13
12:00 -0.22 -0.31 -0.19 -0.34 -0.16
13:00 0.02 0.05 0.09 0.11 0.08
所以我会做什么来计算平均每一行应该是:
df['Average'] = (df.sum(axis=1)/100)
所以,我有这个没有问题,我想现在不过做的事情,为t下降了5只最高和最低执行股票对每一行,然后由90这段时间进行行的总和,和鸿沟。
如果它只是一个栏,我只是对它进行排序,然后就分析它,带走的顶部和底部5.但是,由于我做的这行我Calcs(计算)不知道我是否可以使用相同的原理。
任何帮助将不胜感激。
首先由numpy.sort
排序每行的值,而不选择每行第一个和最后5和最新的统计mean
所有列:
np.random.seed(2019)
df = pd.DataFrame(np.random.randint(10, size=(5, 12)))
print (df)
0 1 2 3 4 5 6 7 8 9 10 11
0 8 2 5 8 6 8 0 0 7 8 5 3
1 0 2 5 7 8 5 4 0 1 6 0 2
2 6 6 3 1 3 5 0 2 6 1 8 2
3 9 8 3 7 7 7 0 3 4 8 1 0
4 6 1 8 2 3 0 9 2 9 8 5 5
print (np.sort(df.values, axis=1))
[[0 0 2 3 5 5 6 7 8 8 8 8]
[0 0 0 1 2 2 4 5 5 6 7 8]
[0 1 1 2 2 3 3 5 6 6 6 8]
[0 0 1 3 3 4 7 7 7 8 8 9]
[0 1 2 2 3 5 5 6 8 8 9 9]]
print (np.sort(df.values, axis=1)[:, 5:-5])
[[5 6]
[2 4]
[3 3]
[4 7]
[5 5]]
df['average'] = np.mean(np.sort(df.values, axis=1)[:, 5:-5], axis=1)
print (df)
0 1 2 3 4 5 ... 7 8 9 10 11 average
0 8 2 5 8 6 8 ... 0 7 8 5 3 5.5
1 0 2 5 7 8 5 ... 0 1 6 0 2 3.0
2 6 6 3 1 3 5 ... 2 6 1 8 2 3.0
3 9 8 3 7 7 7 ... 3 4 8 1 0 5.5
4 6 1 8 2 3 0 ... 2 9 8 5 5 5.0
[5 rows x 13 columns]
您可以解决方法之一就是从argmax
使用Numpy
功能,并反复用np.NaN
替换成一排的前5最大值。在下面的代码,我产生类似的情况下,到你的:
import numpy as np
stock = {}
for i in range(100):
stock['Stock_' + str(i)] = np.random.rand(10)
df = pd.DataFrame.from_dict(stock)
for row in df.values:
for i in range(5):
row[np.argmax(row)] = np.NaN