2017-06-13 4 views
1

私は、連続する列の各ペアを分割し、計算された値を再投入することを検討しています。たとえば、以下のDataFrameがあります。以下のデータフレームでは、B/AとD/Cを分割したいと考えています。次に、B/Aの結果を列Bに再投入し、D/Cの結果を列Dに入力する必要があります。各列の列を互いに分割してください

実際のDataFrameは非常に大きいことに注意してください。 86列あります。私は43列の値を変更するすべての列(つまり86列)をループするか、またはこの操作を行う組み込みの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

恐ろしい、おかげで束! –

関連する問題