Skip to main content
 首页 » 编程设计

python之将每对列彼此分开

2025年05月04日25think

我希望划分每一对连续的列并重新填充计算值。例如,我在下面有以下 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 

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

请您参考如下方法:

您可以使用 .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