汇总数据帧的备用列

时间:2016-07-29 09:38:48

标签: python numpy pandas

我的数据框看起来像

@connect

我想要,

 A   00:00 00:30 01:00 01:30 02:00 .....22:30 23:00 23:30 
 1     2     3     3     4    3            1     6   4
 2     5     6     2     6    5            2     1   2

A 00:00 01:00 02:00 ..... 23:00 1 6 6 7 7 2 7 8 11 3 列中添加了23:30列。

我尝试使用numpy.sumpandas.DataFrame.sum对所有列进行求和。如何判断每个备用列的总和?

1 个答案:

答案 0 :(得分:3)

我认为这应该有效:

In [261]:
df = pd.DataFrame(np.random.randn(5,6), columns=['00:00','00:30','01:00','01:30','02:00','02:30'])
df

Out[261]:
      00:00     00:30     01:00     01:30     02:00     02:30
0  0.176952  1.161850  0.894800 -0.246474  1.252235 -0.816835
1  0.817057 -1.338584 -0.983922 -0.073771 -2.188114  1.819888
2 -0.637196 -0.429361  1.267454  0.040461  1.256472 -0.242053
3  0.270544  0.403675  0.890263  1.767279  1.380494 -1.349156
4 -0.752082  0.380903 -0.795439  1.176303  0.176784  0.693317

In [262]:    
rhs = df.ix[:,1::2]
df.ix[:,::2] + pd.concat([rhs.ix[:,-1:],rhs.ix[:,:-1]],axis=1).values

Out[262]:
      00:00     01:00     02:00
0 -0.639884  2.056650  1.005761
1  2.636945 -2.322505 -2.261885
2 -0.879249  0.838093  1.296933
3 -1.078612  1.293938  3.147772
4 -0.058764 -0.414535  1.353087

In [263]:
rhs

Out[263]:
      00:30     01:30     02:30
0  1.161850 -0.246474 -0.816835
1 -1.338584 -0.073771  1.819888
2 -0.429361  0.040461 -0.242053
3  0.403675  1.767279 -1.349156
4  0.380903  1.176303  0.693317

因此,在您的情况下,由于列名称间隔为30分钟,因此生成的df将使用lhs中的每小时间隔列名称和30分钟间隔的值并添加这些值

所以我们在这里使用带有步骤.ix[:,::2]的slice来返回所有行并在添加时逐步执行列,我们使用.values返回一个numpy数组,因为否则你得到所有NaN值,因为pandas将尝试对齐列名称,你将得不到匹配。

如果您想使用00:00添加23:30,那么我们可以concat使用其余列的最后一列,以便在添加列时获得列对齐