python - 根据值 0 的出现对 Pandas 中的列进行编码
问题描述
我有一个带有这样列的 Pandas 数据框,
df = pd.DataFrame()
df['A'] = [1, 1, 0, 1, 1, 0]
我想用这样的值制作另一列,
[1, 1, 1, 2, 2, 2]
这个想法是从 value 开始,1
当我得到 a1
并且只有当最后一个 value 是 时才增加 value 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
或者:
df['A'].shift().eq(0).cumsum()+1
输出:
0 1
1 1
2 1
3 2
4 2
5 2
Name: A, dtype: int32
推荐阅读
- mysql - 在使用 JSON_EXTRACT 的 SQL 语句上使用多个 HAVING 子句
- html - 为什么这个文本应该浮动到右边,但它会浮动到左边?
- android - 如何根据android中该视图的坐标知道一个视图何时位于另一个视图之上
- java - 从 SQLite 数据库输出到列应该显示值,但只显示默认的“TextView”
- r - 如何摆脱 plotTangentSpace() 中的错误消息?无证论据
- c - 函数参数中带有冒号的数据类型导致“错误:'int'之前的预期表达式”
- r - 如何使用 R 阅读电子邮件
- python - 更改显示顺序
- python - 布尔蒙版切片的意外结果
- java - 在整个 android 应用程序上捕获特定异常