我有一個熊貓數據幀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