concat之后的groupby,组中的列缺失意味着

时间:2014-03-20 07:30:10

标签: python-3.x pandas

连接两个数据帧,然后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 }

1 个答案:

答案 0 :(得分:4)

缺少的列是因为它们是字符串/日期/对象,并且计算平均值对于这些列是没有意义的。

在我看来,你的列d1,d2,d5和d10都是字符串,因为输出显示它们是整数/浮点数的混合。

如果你想计算这些列的平均值,那么改变它们的dtype如下:

df.d1 = df.d1.astype(np.float64) 
# do the same for d2..etc..