我有一个包含这样一列的 Pandas 数据框,
df = pd.DataFrame()
df['A'] = [1, 1, 0, 1, 1, 0]
我想用这样的值创建另一列,
[1, 1, 1, 2, 2, 2]
我的想法是从值 1 开始,并在我得到 1 并且仅当最后一个值为 0 时递增该值。换句话说,如果我有一个 0,则在下一步中递增该值。
我使用 apply 来执行此操作,如下所示,
k = 1
def fn(row):
global k
a, b = row['A'], row['x']
if a == 1 and b == 1:
pass
elif a == 1 and b == 0:
pass
elif a == 0 and b == 1:
k += 1
return (k - 1)
else:
k += 1
return (k - 1)
return k
df['x'] = df['A'].shift(-1)
df['k'] = df.apply(lambda row : fn(row), axis=1)
这真的很低效。我想不出更快的方法。
如何在 Pandas 中有效地实现这一点?
请您参考如下方法:
IIUC,你想计算 0 的出现次数,但发生了偏移:
df['A'].eq(0).cumsum().shift(fill_value=0)+1
或者:
df['A'].shift().eq(0).cumsum()+1
输出:
0 1
1 1
2 1
3 2
4 2
5 2
Name: A, dtype: int32
