2017-09-06 4 views
0

現在の行インデックスからユーザーが最初に選択した行のインデックスを引いた値に等しい新しい列をデータフレームに生成しようとしています。私たちは、このデータフレームを持っていると言う:Pandas dataframe apply関数を使用して、選択した行に基づいて新しい列を作成します。

 A B C 
0 foo bar 
1 bar foo 
2 foo bar 

と私たちのユーザーは、私が列Cの値は、このようにしたい行1を選択した:

A B C 
0 foo bar -1 
1 bar foo 0 
2 foo bar 1 

私はすでに、これは一種の反復処理により実現することができる知っています

for index,row in df.iterrows(): 
    df['C'].loc[index] = index - USER_SELECTED_INDEX 

ただし、これは非常に遅いです。実際には遅いので動作しません。

私の質問は、df.applyを使って処理を高速化するにはどうすればいいですか?そして、現在の行のインデックスを、適用されている関数にどのように渡すことができますか?私は次のようなことをしたい:

def applyCol(index): 
    df['C'].loc[index] = index - USER_SELECTED_INDEX 

df['C'] = df.apply(applyCol, axis=1) 

答えて

0

私が探していた答え。関心のある方:

def applyCol(row): 
    return row.name - USER_SELECTED_INDEX #row.name resolves to the index 

df['C'] = df.apply(applyCol, axis=1) 

ハッピーコーディング!

2

多分これを試してみてください。

df.assign(C=df.index-1) 
Out[28]: 
    A B C 
0 foo bar -1 
1 bar foo 0 
2 foo bar 1 
関連する問題