2017-05-03 8 views
0

ループ内で生成された列をデータフレームに追加したい。私はpandas.mergeを使ってこれを達成することを望んでいましたが、それは私のために働いていないようです。Pandasを使用してループ内で列を結合して追加する

マイコード:簡潔のためにSELECT文を短縮

from datetime import date 
from datetime import timedelta 
import pandas 
import numpy 
import pyodbc 

date1 = date(2017, 1, 1) #Starting Date 
date2 = date(2017, 1, 10) #Ending Date 

DateDelta = date2 - date1 
DateAdd = DateDelta.days 
StartDate = date1 
count = 1 

# Create the holding table 
conn = pyodbc.connect('Server Information') 
**basetable = pandas.read_sql("SELECT....") 

while count <= DateAdd: 
    print(StartDate) 
    **datatable = pandas.read_sql("SELECT...WHERE Date = "+str(StartDate)+"...") 
    finaltable = basetable.merge(datatable,how='left',left_on='OrganizationName',right_on='OrganizationName') 
    StartDate = StartDate + timedelta(days=1) 
    count = count + 1 
print(finaltable) 

が、テーブルのこのような生産見た目:

** BASETABLE

School_District 
--------------- 
District_Alpha 
District_Beta 
... 
District_Zed 

**のDataTable

School_District|2016-01-01| 
---------------|----------| 
District_Alpha | 400  | 
District_Beta | 300  | 
...   | 200  | 
District_Zed | 100  | 

私は、特定のループのために選択された日付の名前を列に持つようにデータテーブルを書きました。列名は一度取得して実行すると一意になる可能性があります。しかし、私の問題は、上記のコードは1列のデータしか生成しないということです。私は理由を推測しています:最後のマージだけが処理されています - 私はpandas.appendを使って回避しようと考えていましたが、pandas.appendはマージのように "参加"しません。参加の一種を達成するための他の方法がありますか&パンダを使用して追加しますか?私の目標は、データのニーズに応じて他の日付を簡単に入力できるように柔軟にすることです。最後に

、私が見たいのは次のとおりです。

School_District|2016-01-01|2016-01-02|... |2016-01-10| 
---------------|----------|----------|-----|----------| 
District_Alpha | 400  | 1  |  | 45  | 
District_Beta | 300  | 2  |  | 33  | 
...   | 200  | 3  |  | 5435 | 
District_Zed | 100  | 4  |  | 333 | 

答えて

1

あなたのエラーが声明finaltable = basetable.merge(datatable,...)です。各ループ反復で、元のbasetableを新しいdatatableにマージし、結果をfinaltable ...に格納して破棄します。必要なのはbasetable = basetable.merge(datatable,...)です。いいえfinaltable s。

+0

まあ、それは恥ずかしいです。それはそう簡単な修正でした。お手伝いありがとう。 – userPinealbody

関連する問題