2017-02-17 19 views
0

私はこの上に私たちの髪を引っ張りますが、誰かが簡単な答えを提供すると確信しています。パンダのデータフレームを選択カラムの値に応じてカラムの値を変更

data = [{'check': None, 'iterator': 1, 'x1': 1, 'x2': 2, 'x3':3}, 
     {'check': None, 'iterator': 2, 'x1': 1, 'x2': 2, 'x3':3}, 
     {'check': None, 'iterator': 3, 'x1': 1, 'x2': 2 , 'x3':3}] 
df = pd.DataFrame(data) 
display(df) 

enter image description here

私は「イテレータ」列の値だけ右にINGのシフトによってチェック欄を埋めるためにしようとしています。つまり、チェックの第1行は1、第2行は2、第3は3となります。

これは、私が作業しているはるかに大きなデータセットを単純化したものです。コード。あなたはnumpyadvanced indexing使用する場合があります

+0

'df ['check'] = df ['iterator']'という理由だけでは何か? – chrisaycock

+0

質問に出力データフレームを渡すこともできます。 – titipata

答えて

0

:あいまいさを避けるために

df['check'] = df.filter(like="x").values[np.arange(len(df)), df.iterator - 1] 

enter image description here


は、ここでは異なる例である:

data = [{'check': None, 'iterator': 2, 'x1': 3, 'x2': 4, 'x3':3}, 
     {'check': None, 'iterator': 1, 'x1': 1, 'x2': 5, 'x3':3}, 
     {'check': None, 'iterator': 2, 'x1': 2, 'x2': 2 , 'x3':1}] 
df = pd.DataFrame(data) 

df['check'] = df.filter(like="x").values[np.arange(len(df)), df.iterator-1] 
df 

enter image description here

+0

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

関連する問題