2017-09-20 1 views
0

私は、そのデータフレーム内の2つの既存の列に基づいてpandasデータフレームを追加しようとしています。私が持っている問題は、パンダのデータフレームのインデックスが整数フォーマットではなくオブジェクトフォーマットであることです。状況をもっと複雑にするために、データフレームの特定の範囲を追加し、残りのセルを新しい列に「NaN」として残したいだけです。ある範囲のデータフレームだけを追加するために、私は "for"ループを使わなければなりません。Pythonで特定の範囲のオブジェクトインデックスのみをループする

ここに私の質問です:オブジェクトインデックスを持っていると、データフレームの特定の範囲をどのようにループするのですか?私の最初のパンダのデータフレームは、単にある

...

import pandas as pd 

dates = ['2005Q4','2006Q1','2006Q2','2006Q3','2006Q4','2007Q1','2007Q2'] 
col1 = [ 5.9805, 6.2181, 6.3508, 6.7878, 6.6212, 6.4583, 6.4068 ] 
col2 = [ 'NaN', -0.001054985938, -0.121731711952, 0.046275331889, 
     -0.017517211963, -0.023422842422, 0.009072170884 ] 

data = pd.DataFrame(
        { 
        'col1': col1, 
        'col2': col2 
        }, 
        columns = [ 
           'col1', 
           'col2' 
           ], 
        index = dates 
        ) 

私がやろうとしているすべては、このようなものです...

data['col3'] = 'NaN' 

for i in range('2006Q1','2006Q4',1): 
    data['col3'][i] = data['col1'][i-1] +\ 
         data['col2'][i] 

単純に、私はPythonはだろうと期待していましたそのインデックス内のオブジェクト名をその特定のインデックスに関連付けられた実際のインデックス番号と相関させることができる。たとえば、私が指定したインデックスを定義すると、Pythonは '2005Q4'がindex = 0、 '2006Q1'がindex = 1などであることを知ることができます。このようにして、それはまだ私が参照している整数を知っているだろう。しかし、これはそうではないようです。

オブジェクトを日付形式に変換しないようにする必要があります。インデックスを「YearQuarter」の形式で保存することが重要です。これを行うためのpd.to_datetimeを使用する簡単な方法はまだありません。

Pythonでオブジェクトベースのインデックスの特定の範囲のみをループする方法はありますか?

答えて

0

リストに.index()を使用すると、探しているアイテムのインデックスが返されます。このループをforループに試してみてください。

for i in range(dates.index('2006Q1'),dates.index('2006Q4'),1): 

明らかにこれを行うより効率的な方法です。

data['col3'] = data.col1 - data.col2.shift(-1) 
は、列全体を上下にシフトします。
関連する問題