2017-02-17 138 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

我試圖通過轉變由值在「迭代器」一欄荷蘭國際集團到右側,以填補檢查列。即,「檢查」的第一行將是1,第二行將是2,第三行將是3.

這是我正在處理的更大的數據集的簡化,所以我會欣賞矢量化碼。

+0

任何你不能只是'df ['check'] = df ['iterator']'的原因? – chrisaycock

+0

如果您也可以在問題中提供輸出數據框,那將會很棒。 – titipata

回答

0

您可能需要使用numpyadvanced indexing

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

相關問題