将每对色谱柱相互分开

时间:2017-06-13 00:47:24

标签: python pandas numpy

我希望将每对连续列分开并重新填充计算值。例如,我在下面有以下DataFrame。在下面的数据框中,我想划分B / A和D / C.然后应在B栏重新填充B / A的结果,D / C的结果应填入D栏。

请注意,我的实际DataFrame非常大。它有86列。我希望有一个自动化方案,它可以循环遍历所有列(即86列)来更改43列中的值或者执行此操作的内置Pandas函数。

0

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

1 个答案:

答案 0 :(得分: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