根据不同的列值选择Pandas Dataframe列值

时间:2017-02-17 00:52:36

标签: python pandas dataframe

把头发拉过来,虽然我确定有人会提供一个简单的答案。

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

我试图通过" iterator"中的值 shift 向右填充检查列。柱。即,第一行"检查"将是1,第二个将是2,第三个将是3.

它是我正在处理的更大数据集的简化,所以我很欣赏矢量化代码。

1 个答案:

答案 0 :(得分:0)

您可能希望使用numpy的{​​{3}}:

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

advanced indexing

为避免歧义,这是一个不同的例子:

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