2017-06-13 54 views
1

我期待分出每一对连续列并重新计算出来的值。例如,我有下面的DataFrame。在下面的数据框中,我想划分B/A和D/C。那么B/A的结果应该在列B中重新填充,并且D/C的结果应该填充在列D中。请注意,我的实际DataFrame非常大。它有86列。我宁愿有一个自动化方案,或者循环遍历所有列(即86列),这些列会更改43列中的值,或者执行此操作的内置Pandas函数。将每一列彼此分开

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

感谢您阅读本文并感谢您的帮助。

回答

5

您可以使用.iloc切片每隔一列,然后.values,以消除两轴指数所以它会正确对齐:

>>> df.iloc[:, 1::2] /= df.iloc[:, ::2].values 
>>> df 
      A   B   C   D 
0 2.056494 -1.459809 0.516822 -2.590536 
1 0.082295 16.862920 -0.495226 -2.260691 
2 0.298618 -0.435868 0.804705 -0.149260 
3 0.178088 6.385820 1.331856 -0.354933 
4 -0.378670 -4.354823 -0.240723 -8.491557 
5 3.602587 0.319910 -0.170646 5.636944 
6 -0.285846 0.541869 1.492879 0.504051 
7 -0.412809 -2.608461 -2.001025 0.476766 

.iloc允许我们索引位置上使用标准Python的切片:

>>> df.iloc[:, 1::2] 
      B   D 
0 -1.459809 -2.590536 
1 16.862920 -2.260691 
2 -0.435868 -0.149260 
3 6.385820 -0.354933 
4 -4.354823 -8.491557 
5 0.319910 5.636944 
6 0.541869 0.504051 
7 -2.608461 0.476766 

而且没有.values,我们仍然必须列名,其会给我们

>>> df.iloc[:, 1::2]/df.iloc[:, ::2] 
    A B C D 
0 NaN NaN NaN NaN 
1 NaN NaN NaN NaN 
2 NaN NaN NaN NaN 
3 NaN NaN NaN NaN 
4 NaN NaN NaN NaN 
5 NaN NaN NaN NaN 
6 NaN NaN NaN NaN 
7 NaN NaN NaN NaN 
+0

太棒了,谢谢一堆! –