【发布时间】:2015-03-03 04:16:58
【问题描述】:
我有一个熊猫数据框,df。第一行内容如下:
-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 列的符号。知道如何以 Python 方式执行此操作吗?
EDITII:我还有一个疑问。我的 numpy 数组应该是一维的。但正如您在上面看到的,它是二维的,我必须通过 2 个索引不必要地访问单元格。这是为什么?。这就是我创建 numpy 数组的方式(两个 1x11025 行的 df 与 11025x20 矩阵的点积,给出 1x20 数组。但它以数组的形式出现,如上所示。创建 numpy 数组的代码:
Y1=np.dot(X_smilie_norm[0:1],W)
X_smilie_norm 是一个 28x11025 的熊猫数据框。我只访问第一行,并用 W 做一个点积,它是一个 11025x20 矩阵。当我想要的只是一维时,它给出了一个双维数组,这样我就可以只使用单个索引访问 Y1 值。
【问题讨论】:
-
IMO 使用 3x3 数组(或类似的小数组)会更清晰。