我有一个带有这样一列的Pandas数据框,
df = pd.DataFrame()
df['A'] = [1, 1, 0, 1, 1, 0]
我想用这样的值制作另一列
[1, 1, 1, 2, 2, 2]
这个想法是从值1
开始,直到我得到1
时才递增该值,只有最后一个值是0
时才递增。换句话说,如果我有一个0
,请在下一步中增加该值。
我使用了一个应用程序,如下所示,
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)
这实际上是效率低下的。我想不出一个更快的方法。
如何在熊猫中有效地实现这一目标??
答案 0 :(得分:3)
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
答案 1 :(得分:2)
不确定速度部分
Private Sub C2_Click()
Sheets("Prueba").Range("A1").value= Evaluate("=SUM(Prueba:Reporte!A1:C5)")
End Sub