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

相关问题