我的数据框看起来像
@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.sum
和pandas.DataFrame.sum
对所有列进行求和。如何判断每个备用列的总和?
答案 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
使用其余列的最后一列,以便在添加列时获得列对齐