Python 基于值0的出现对列进行编码
我有一个熊猫数据框,有这样一列Python 基于值0的出现对列进行编码,python,pandas,Python,Pandas,我有一个熊猫数据框,有这样一列 df = pd.DataFrame() df['A'] = [1, 1, 0, 1, 1, 0] 我想用这样的值制作另一列 df = pd.DataFrame() df['A'] = [1, 1, 0, 1, 1, 0] [1,1,1,2,2] 想法是从值1开始,当我得到1时,仅当最后一个值为0时,才增加值。换句话说,如果我有一个0,那么在下一步中增加这个值 我使用了一个应用程序来实现这一点,如下所示 k = 1 def fn(row): glob
df = pd.DataFrame()
df['A'] = [1, 1, 0, 1, 1, 0]
我想用这样的值制作另一列
df = pd.DataFrame()
df['A'] = [1, 1, 0, 1, 1, 0]
[1,1,1,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)
这是非常低效的。我想不出一个更快的方法
如何在Pandas中有效地实现这一点?IIUC,您希望计算0的出现次数,但已移位:
df['A'].eq(0).cumsum().shift(fill_value=0)+1
或:
输出:
0 1
1 1
2 1
3 2
4 2
5 2
Name: A, dtype: int32
IIUC,您要计算0的出现次数,但已移位:
df['A'].eq(0).cumsum().shift(fill_value=0)+1
或:
输出:
0 1
1 1
2 1
3 2
4 2
5 2
Name: A, dtype: int32
不确定速度部分
s=df.index[df.A.eq(0)]
pd.Series(np.arange(len(s))+1,index=s).reindex(df.index,method='bfill')
Out[41]:
0 1
1 1
2 1
3 2
4 2
5 2
dtype: int32
不确定速度部分
s=df.index[df.A.eq(0)]
pd.Series(np.arange(len(s))+1,index=s).reindex(df.index,method='bfill')
Out[41]:
0 1
1 1
2 1
3 2
4 2
5 2
dtype: int32
如果输入类似于[0,0,1,1,1],我希望它是[1,2,3,3,3],如果输入类似于[0,0,1,1,1],我希望它能像预期的那样工作。谢谢你。谢谢