2016-07-18 13 views
0

Vlookupを使用してExcelで実行できる2つのテーブルをマージするPythonコードを作成しましたが、このプロセスをより大きなデータセットに自動化したいと考えていました。しかし、出力データが大きすぎて、両方のテーブルのすべての列を含んでいるようです。私はちょうど2番目のテーブルdf_posを使用していくつかのカラムを検索したいと思っていました。私のコードがこのタスクを実行するために効率的か実現可能かどうかを見てみましょうか?python pandas merge/vlookup tables

ありがとうございました!

def weighted(mwa="mwa.csv",mwa2="mwa.csv",output="WeightedMWA.csv"): 
    df=pd.read_csv(mwa, thousands=",") 
    df['Keyword']=df['Keyword'].replace('+','') 
    df_pos=pd.read_csv("mwa.csv", thousands=",") 
    df_pos['Keyword']=df_pos['Keyword'].replace('+','') 
    sumImp=df_pos['Impr.'].sum() 
    sumPos=df_pos.groupby(by=['Keyword'])['Avg. Pos.'].sum() 
    df_pos['WeightedPos']=sumPos/sumImp 
    mergedDF=pd.merge(left=df, right=df_pos, how="left", left_on="Keyword",right_on="Keyword") 
    mergedDF.to_csv(output) 
+2

これは[codereview](http://codereview.stackexchange.com/)に最適です。 – shivsn

+0

私はStackoverflowを使用していない、私は次回これを行います。ありがとう! – prodirector

答えて

0

あなたには十分な情報が提供されていません。マージされたデータフレームを出力していますが、出力に必要な列が示されていません。理想的には、出力に必要な列とマージに必要な列のみを保持したい場合があります。

read_csv関数とそのusecolsパラメータを使用して、インポートする列を制限することができます。 documentationは言う:

usecols : array-like, default None 
    Return a subset of the columns. All elements in this array must either 
    be positional (i.e. integer indices into the document columns) or strings 
    that correspond to column names provided either by the user in `names` or 
    inferred from the document header row(s). For example, a valid `usecols` 
    parameter would be [0, 1, 2] or ['foo', 'bar', 'baz']. Using this parameter 
    results in much faster parsing time and lower memory usage. 
+0

これは実際のデータを含んでいるので、列の名前などをすべて表示することはできませんでした。しかし、これを試し、あなたに知らせるでしょう。ありがとうございました! – prodirector

+0

@prodirectorで問題は解決しましたか? – Matt

+0

こんにちは私はこれを 'usecols'と追加しましたが、まずはマージパートを修正しなければならないと思います。 – prodirector

0

あなただけの別の行列からデータを検索するdf_posを使用している場合は、ちょうどあなたが[df_pos.LOOKUPCOLUMNNAME、すなわちdatasourcematrixからのデータを探しているフレームへのインデックスとしてdf_posでフィールドを使用します]、または列名がない場合はdatasourcematrix [df_pos.ix [5]]などを使用できます。非常に簡単で高速です...

+0

ありがとう、私はこれを試し、あなたに知らせるでしょう。 – prodirector

+0

したがって、基本的にデータソースとルックアップデータは同じファイルです。私は試しました:mergedDF = df [df_pos.Keyword] 結果は、KeyError: "['シリアルクーポン'シリアルクーポン 'シリアルクーポン' ... 、\ n 'ベビーケア割引' 'ベビーケアディスカウント' 'ベイビーケアディスカウント']インデックスではありません。 – prodirector

+0

DataFrameインデックスでこれらの名前を使用しないようにするには、正しいインデックスを見つけるまでix [5]メソッドを試してください。 0エンドを循環します。 Spyder IDEを使用すると、変数エクスプローラでDataFrameを簡単に開くことができます。 – Matt