把头发拉过来,虽然我确定有人会提供一个简单的答案。
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)
我试图通过" iterator"中的值 shift 向右填充检查列。柱。即,第一行"检查"将是1,第二个将是2,第三个将是3.
它是我正在处理的更大数据集的简化,所以我很欣赏矢量化代码。
答案 0 :(得分:0)
您可能希望使用numpy
的{{3}}:
df['check'] = df.filter(like="x").values[np.arange(len(df)), df.iterator - 1]
为避免歧义,这是一个不同的例子:
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