我有一个pandas数据帧:
>>> X_df.shape
Out[35]: (177, 2762)
>>> X_df.ix[0:5,1000:1005]
Out[40]:
1000 1001 1002 1003 1004 1005
2016-01-04 119.225 nan nan nan nan nan
2016-01-05 119.225 119.189 119.177 119.160 119.203 119.220
2016-01-06 119.175 119.175 nan 119.204 119.208 119.221
2016-01-07 118.532 nan 118.542 118.529 nan 118.534
2016-01-08 117.861 117.820 117.762 nan 117.686 117.709
我创建了每行的第一个差异的平均值:
>>> mu = (X_df.diff(1,axis=1)).mean(axis=1)
>>> mu.head()
Out[42]:
2016-01-04 -0.001
2016-01-05 -0.001
2016-01-06 -0.000
2016-01-07 -0.000
2016-01-08 -0.000
dtype: float64
然后,如果我试图从每个值中减去这个均值,我得到所有的nans:
>>> (X_df.diff(1,axis=1)-mu).ix[0:5,1000:1005]
Out[51]:
1000 1001 1002 1003 1004
2016-01-04 nan nan nan nan nan
2016-01-05 nan nan nan nan nan
2016-01-06 nan nan nan nan nan
2016-01-07 nan nan nan nan nan
2016-01-08 nan nan nan nan nan
不同的减法方式
>>> ((X_df.diff(1,axis=1).subtract(mu,axis=1))).ix[0:5,1000:1005]
Out[52]:
1000 1001 1002 1003 1004
2016-01-04 nan nan nan nan nan
2016-01-05 nan nan nan nan nan
2016-01-06 nan nan nan nan nan
2016-01-07 nan nan nan nan nan
2016-01-08 nan nan nan nan nan
我使用mu[:,]
代替mu
有没有办法解决这个问题?
答案 0 :(得分:3)
axis=0
需要sub
:
a = (X_df.diff(1,axis=1))
print (a)
1000 1001 1002 1003 1004 1005
2016-01-04 NaN NaN NaN NaN NaN NaN
2016-01-05 NaN -0.036 -0.012 -0.017 0.043 0.017
2016-01-06 NaN 0.000 NaN NaN 0.004 0.013
2016-01-07 NaN NaN NaN -0.013 NaN NaN
2016-01-08 NaN -0.041 -0.058 NaN NaN 0.023
print (a.sub(a.mean(axis=1), axis=0))
#sub same as subtract, only less typing
#print (a.subtract(a.mean(axis=1), axis=0))
1000 1001 1002 1003 1004 1005
2016-01-04 NaN NaN NaN NaN NaN NaN
2016-01-05 NaN -0.035000 -0.011000 -0.016 0.044000 0.018000
2016-01-06 NaN -0.005667 NaN NaN -0.001667 0.007333
2016-01-07 NaN NaN NaN 0.000 NaN NaN
2016-01-08 NaN -0.015667 -0.032667 NaN NaN 0.048333