连接两个数据帧,然后groupby' type'并计算第二个df的平均值,即d1~d10,显示在concat的数据帧中,但不在分组的平均值中。我可能错过了一些pt ...请注明......这里的代码。
results=pd.concat([stockpicks,stock_analysis],axis=1)
print(stockpicks.head(5))
print(stock_analysis.head(5))
print(results.head(5))
results_typed=results.groupby('type')
mean_overall=results_typed.mean()
print(mean_overall)
这里是输出。
date type stocknum price pe
0 2014-02-17 cao3 0326.HK 0.20 20.00
1 2014-02-17 cao3 0536.HK 2.56 25.60
2 2014-02-17 cao3 0595.HK 0.97 48.50
3 2014-02-17 cao3 0698.HK 0.95 15.83
4 2014-02-17 cao3 0759.HK 3.25 108.33
[5 rows x 5 columns]
d1 d2 d5 d10
0 95 95 95 90
1 99.21875 100 97.65625 89.0625
2 100 107.2165 104.1237 93.81443
3 102.1053 97.89474 97.89474 105.2632
4 95.38462 94.15385 92 90.15385
[5 rows x 4 columns]
date type stocknum price pe d1 d2 d5 \
0 2014-02-17 cao3 0326.HK 0.20 20.00 95 95 95
1 2014-02-17 cao3 0536.HK 2.56 25.60 99.21875 100 97.65625
2 2014-02-17 cao3 0595.HK 0.97 48.50 100 107.2165 104.1237
3 2014-02-17 cao3 0698.HK 0.95 15.83 102.1053 97.89474 97.89474
4 2014-02-17 cao3 0759.HK 3.25 108.33 95.38462 94.15385 92
d10
0 90
1 89.0625
2 93.81443
3 105.2632
4 90.15385
[5 rows x 9 columns]
price pe
type
bbom 2.050526 8.135789
bbos 3.136842 10.116316
cao3 1.717368 36.494211
maos 6.661935 20.565161
rscp 48.983333 6.280000
[5 rows x 2 columns]
实际上我一直在重写代码。在我通过重建索引扩展第一个df之前,然后将值分配给展开的df,groupby' type'并计算出分组均值,完全没问题......
我在ubuntu上使用python3.3和pandas 13.1。
计算d值的陈述
days=[1,2,5,10]
p0=stockprice[p0_date]
stock_pct_change={('d'+str(d)):stockprice[p0_date+d]/p0*100.0 if (p0_date+d)< len(trading_days) else np.nan for d in days }
答案 0 :(得分:4)
缺少的列是因为它们是字符串/日期/对象,并且计算平均值对于这些列是没有意义的。
在我看来,你的列d1,d2,d5和d10都是字符串,因为输出显示它们是整数/浮点数的混合。
如果你想计算这些列的平均值,那么改变它们的dtype如下:
df.d1 = df.d1.astype(np.float64)
# do the same for d2..etc..