我在google上找到了一些解决方案,但我始终无法正确地应用这些解决方案,而且我遇到了无法修复的错误,所以我不得不询问。我试图创建函数,然后将其应用于数据帧,但是遇到了这个错误,我无法修复它。在
"'numpy.int64' object has no attribute 'shift'"
所以,我有了第一个数据帧
A B
1 0 0
2 1 0
3 0 0
4 0 0
5 0 1
6 0 0
结果应该是这样的:
^{pr2}$因此,当1出现在A列时,它应该在A列中重新循环,直到1出现在B列中。没有其他输入是可能的,它将用于几千行。在
谢谢。在
编辑2:这是对编辑后的答案同样有效的确认。在
请尝试以下代码:
说明:
df.A.cumsum()
产生一系列递增的数字 在A
列中的每个1
上。在fillna(0, downcast='infer')
将首字母{0
并将整个序列的类型改回int
。在(... != ...)
计算一个布尔向量-几乎是你想要的。在astype(int)
转换上述布尔向量 到int向量。在A
列。在编辑
经过你的评论和更长的数据来源,我决定解决 问题完全相反。在
从定义要应用于每行的函数开始:
^{pr2}$此函数使用全局变量
nextRes
-应该是什么 下一行的结果。在B == 1
(不管A
值是什么)意思是“关闭”,但是启动 从下一行开始。在否则(
B == 0
)我们有两种可能性:A == 0
-没有变化A == 1
-“打开”现在。在然后,要执行任务,初始化“next”值并应用 每行的上述函数:
或者,要方便地将源数据与结果进行比较,请运行:
这样,您将拥有源数据和
A
的“新值”。在相关问题 更多 >
编程相关推荐