我有一个熊猫数据帧df。第一行的内容如下:Pythonic方式比较numpy数组与数据帧的符号
-1387.900
1 -1149.000
2 1526.300
3 1306.300
4 1134.300
5 -1077.200
6 -734.890
7 -340.870
8 -268.970
9 -176.070
10 -515.510
11 283.440
12 -55.148
13 -1701.800
14 -63.294
15 -270.720
16 2216.800
17 4251.200
18 1459.000
19 -613.680
这基本上是一个系列。我有一个(1X20)numpy的数组,如下所示:
array([[ 1308.22000654, -920.02730748, 1285.54273707, -1119.67498439,
789.50281435, -331.14325768, 756.67399745, -101.9251545 ,
157.17779635, -333.17043669, -191.10517521, -127.80219696,
698.32168135, 154.30798847, -1055.54268665, -1795.96042107,
202.53471769, 25.58830318, 793.63902134, 220.94259961]])
现在我想的是,对DF数据帧的这顶行的每个单元格的值,我需要检查,如果该小区的符号相同作为上述numpy阵列的相应单元格符号。如果符号不同,则对于df中的所有行,对于相应的坐标,将df中每个相应坐标值的符号翻转。例如。如果你看到第一个单元格的值。 Df有-1387,而numpy数组有1380.所以现在第一列df帧应该有它的符号反转。与其他栏一样。
我正在使用for循环。 像
for x in range(20):
if(np.sign(Y1[0][x])!=np.sign(df.ix[0][x])):
if(np.sign(Y1[0][x])==0 and np.sign(df.ix[0][x]>0)):
df[x]=df[x]*1
else:
df[x]=df[x]*(-1)
我还需要确保,如果np.sign(Y [X])= 0,那么它需要的符号不是零,而是+1。我可以在上面的代码中添加这个条件,但重点是如何使它更pythonic ?.
编辑:我已经添加了我写的代码,似乎工作正常,并根据上述条件翻转df列的标志。任何想法如何以pythonic的方式做到这一点?
EDITII:我还有一个疑问。我的numpy数组应该是单维的。但是正如你在上面看到的那样,它是以二维的形式出现的,我必须通过两个索引不必要地访问这个单元格。这是为什么?。这是我如何创建numpy的阵列(两个1x11025一行11025x20矩阵给1X20阵列测向的点积但是当你看到它上面来作为数组的数组代码来创建numpy的数组:。
Y1=np.dot(X_smilie_norm[0:1],W)
X_smilie_norm是一个28x11025熊猫数据框,我只是访问第一行,用W做一个11025x20矩阵的点积,当我想要的只是一个单维时,它给出了一个二维数组,这样我就可以访问Y1值只是单一索引
IMO这将是一个3x3的阵列(或一些类似的小)更清晰。 – 2015-03-03 07:33:38