2016-04-20 1 views
0

私は、パンダデータフレームの各行に対して関数を実行し、その値を派生カラムスコアで出力したかったのです。以下に示す関数は例としてラムダですが、親データフレームインデックスを持つパンダシリーズのインデックス

例:

def calculate(row): 
    cols=row.columns 
    loc=row['loc'] 
    h=row['h'] 
    isst=row['Ist'] 
    Hol=row['Hol'] 
    return loc+h+len(cols) 

a['score']=a.apply(lambda row:calculate(row),axis=1) 

ができます:行のような親データフレームの列ラベルとアクセス列名によって[「COL1」]が、一連のオブジェクトは列ラベル情報を失うラムダ関数に渡され

AttributeError: ("'Series' object has no attribute 'columns'", u'occurred at index 0') 

ラムダ関数の名前付きタプルのような名前付きシリーズにアクセスするにはどうすればよいですか?

クイックハックが実行することである:それはカラムラベルによって機能にアクセスできるようにmakedict関数は行ごとに辞書を作成する

a['score']=a.apply(lambda row:calculate(makedict(row,row.index)),axis=1) 

。しかし、パンダの道はありますか?

答えて

0

最後にこれを助けるto_dict機能が見つかりました:

def calculate(row): 
    row=row.to_dict() 
    loc=row['loc'] 
    h=row['h'] 
    isst=row['Ist'] 
    Hol=row['Hol'] 
    return loc+h+len(row.keys()) 

a['score']=a.apply(calculate,axis=1) 
0

なぜ:

a['score']=a.apply(lambda row:row['loc'] + row['h']+len(row.index),axis=1) 
+0

行が – stackit

+1

系列オブジェクトしたがってカラムインデクシング不可能 'DataFrame'インデックスと列を有しなります。フレームから行を抽出した後は、上記のようにインデックスを持つ 'Series'です。新しいシリーズのインデックスは、DataFrameの列と同じになります。 –

関連する問題