2017-07-07 37 views
2

我有如下所示的数据。我想用权重列来划分每一行。有没有一种自动化的方式来做到这一点?我的数据有几列。将最后一列中的值隔开所有其他列

我寻找的是应在列A被取代,C /重量的结果应该在C列被取代,A /重量的结果,依此类推,直到最后一对列。

  A   B   C   D  Weight 
0 2.056494 -3.002088 0.516822 -1.338846  0.40 
1 0.082295 1.387734 -0.495226 1.119553  0.50 
2 0.298618 -0.130158 0.804705 -0.120110  0.25 
3 0.178088 1.137238 1.331856 -0.472720  0.50 
4 -0.378670 1.649041 -0.240723 2.044113  0.65 
5 3.602587 1.152502 -0.170646 -0.961922  0.50 
6 -0.285846 -0.154891 1.492879 0.752487  0.56 
7 -0.412809 1.076796 -2.001025 -0.954021  0.25 

我有这样的事情,但它不工作:

results=results.iloc[:, 0::2].div(results['Weight'], axis=0) 

下面的代码适用于所有其他列(B/A和d/C)。但是我只需要“权重”列中的分母即可。

results_201.iloc[:,1::2] /= results_201.iloc[:,::2].values 

感谢您阅读本文并寻求帮助!

回答

1

我们需要broadcasting这里。所以,一个方法将涉及使用基础阵列数据用于现场编辑,像这样 -

df.iloc[:,:-1:2] = df.iloc[:,:-1:2].values/df.iloc[:,[-1]].values 

采样运行 -

In [62]: df 
Out[62]: 
     A  B  C  D Weight 
0 2.0565 -3.0021 0.5168 -1.3388 0.4000 
1 0.0823 1.3877 -0.4952 1.1196 0.5000 
2 0.2986 -0.1302 0.8047 -0.1201 0.2500 
3 0.1781 1.1372 1.3319 -0.4727 0.5000 
4 -0.3787 1.6490 -0.2407 2.0441 0.6500 
5 3.6026 1.1525 -0.1706 -0.9619 0.5000 
6 -0.2858 -0.1549 1.4929 0.7525 0.5600 
7 -0.4128 1.0768 -2.0010 -0.9540 0.2500 

In [63]: df.iloc[:,:-1:2] = df.iloc[:,:-1:2].values/df.iloc[:,[-1]].values 

In [64]: df 
Out[64]: 
     A  B  C  D Weight 
0 5.1412 -3.0021 1.2921 -1.3388 0.4000 
1 0.1646 1.3877 -0.9905 1.1196 0.5000 
2 1.1945 -0.1302 3.2188 -0.1201 0.2500 
3 0.3562 1.1372 2.6637 -0.4727 0.5000 
4 -0.5826 1.6490 -0.3703 2.0441 0.6500 
5 7.2052 1.1525 -0.3413 -0.9619 0.5000 
6 -0.5104 -0.1549 2.6659 0.7525 0.5600 
7 -1.6512 1.0768 -8.0041 -0.9540 0.2500 

的对眼睛更加容易的选择将是得到整个数据阵列视图和该阵列本身的过程 -

In [96]: df 
Out[96]: 
     A  B  C  D Weight 
0 2.0565 -3.0021 0.5168 -1.3388 0.4000 
1 0.0823 1.3877 -0.4952 1.1196 0.5000 
2 0.2986 -0.1302 0.8047 -0.1201 0.2500 
3 0.1781 1.1372 1.3319 -0.4727 0.5000 
4 -0.3787 1.6490 -0.2407 2.0441 0.6500 
5 3.6026 1.1525 -0.1706 -0.9619 0.5000 
6 -0.2858 -0.1549 1.4929 0.7525 0.5600 
7 -0.4128 1.0768 -2.0010 -0.9540 0.2500 

In [97]: a = df.values 

In [98]: a[:,:-1:2] /= a[:,[-1]] 

In [99]: df 
Out[99]: 
     A  B  C  D Weight 
0 5.1412 -3.0021 1.2921 -1.3388 0.4000 
1 0.1646 1.3877 -0.9905 1.1196 0.5000 
2 1.1945 -0.1302 3.2188 -0.1201 0.2500 
3 0.3562 1.1372 2.6637 -0.4727 0.5000 
4 -0.5826 1.6490 -0.3703 2.0441 0.6500 
5 7.2052 1.1525 -0.3413 -0.9619 0.5000 
6 -0.5104 -0.1549 2.6659 0.7525 0.5600 
7 -1.6512 1.0768 -8.0041 -0.9540 0.2500 
+0

谢谢,Divakar! –

相关问题