我正在尝试执行以下操作:
对于满足“B”列条件的“A”列的每一行,我想用列表“end”的第一个元素替换“A”列中的值,然后删除第一个元素,以便下一行是列表中先前的“第二个”元素。
如果我用 for 循环来做,它看起来像这样,假设条件是前一行中 B 的值为 True (B 只包含布尔值):
for i in range(1, len(data)-1):
if data.loc[i, 'B'].shift(-1) == True:
data.loc[i, 'A'] = end[0]
del end[0]
由于我的 df 很大,我正在寻找矢量化版本,但显然我的方法不起作用,它总是只取列表的第一个元素:
data['A'][data['B'].shift(-1)== True] = data['A'].apply(lambda x: end.pop(0))
有任何想法吗?