当前位置: 首页 > 面试题库 >

python pandas-创建一个保留连续值连续计数的列

严誉
2023-03-14
问题内容

我正在尝试创建一个列(“ consec”),该列将连续计数另一个(“二进制”)中的连续值,而不使用循环。这是预期的结果:

.    binary consec
1       0      0
2       1      1
3       1      2
4       1      3
5       1      4
5       0      0
6       1      1
7       1      2
8       0      0

但是这个

df['consec'][df['binary']==1] = df['consec'].shift(1) + df['binary']

导致…

.  binary   consec
0     1       NaN
1     1       1
2     1       1
3     0       0
4     1       1
5     0       0
6     1       1
7     1       1
8     1       1
9     0       0

我看到了其他使用分组或排序的帖子,但不幸的是,我看不到如何对我有用。在此先感谢您的帮助。


问题答案:

您可以使用compare-cumsum-groupby模式(我 确实 需要解决这个问题才能编写文档),最后是cumcount

>>> df = pd.DataFrame({"binary": [0,1,1,1,0,0,1,1,0]})
>>> df["consec"] = df["binary"].groupby((df["binary"] == 0).cumsum()).cumcount()
>>> df
   binary  consec
0       0       0
1       1       1
2       1       2
3       1       3
4       0       0
5       0       0
6       1       1
7       1       2
8       0       0

之所以有效,是因为首先我们得到了要重置计数器的位置:

>>> (df["binary"] == 0)
0     True
1    False
2    False
3    False
4     True
5     True
6    False
7    False
8     True
Name: binary, dtype: bool

这些的总和为每个组提供了不同的ID:

>>> (df["binary"] == 0).cumsum()
0    1
1    1
2    1
3    1
4    2
5    3
6    3
7    3
8    4
Name: binary, dtype: int64

然后,我们可以将其传递给groupby并用于cumcount获取每个组中的递增索引。



 类似资料:
  • 问题内容: 有没有一种方法可以获取表示行中NULL字段数的列?这将在SELECT语句中。 例如: 更新:我想要此查询,以便我可以基于给定书的有多少会员销售进行排序。因此,无论哪个会员,拥有3个会员的排名都会比拥有2个会员的排名高。我的数据库中大约有七个会员,并且会不断增长。因此,任何要求指定每个会员字段的查询都可能太长 桌子: Affiliates_Cache- 主键是Affiliate_ISBN

  • 问题内容: 假设我在numpy数组中有一堆数字,并且根据返回布尔数组的条件对它们进行了测试: 并使用此布尔数组,我想计算True连续出现的所有长度。例如,如果我有,我想回去。 我可以使用以下代码来做到这一点: 但是是否已经为此或python,numpy,scipy等函数实现了任何功能,该函数计算给定输入在列表或数组中连续出现的长度? 问题答案: 这是使用的解决方案(可能不是最快的解决方案):

  • 问题内容: 我正在尝试计算股票收益数据中连续上升的天数- 因此,如果正数日为1,负数为0,则应该返回一个列表。 我来到了一个解决方案,它在代码行数方面很整洁,但是 非常 慢: 我猜想我遍历整个列表太多次了。是否有一种很好的Pythonic方式可以实现我想要的,而只需要遍历一次数据?我可以自己编写一个循环,但想知道是否有更好的方法。 谢谢! 问题答案: 为什么痴迷于超pythonic的做事方式?可读

  • 问题H[最长自然后继数]如果第二个是自然数序列中第一个的后继数(1和2是自然后继数),则两个连续的整数是自然后继数。编写一个程序,读取一个数字N,后跟N个整数,然后打印连续自然后继的最长序列的长度。示例: 输入 7 2 3 5 6 7 9 10输出3这里是我的代码到目前为止有人能帮我吗

  • 我有数据。下面的框架。我想添加一列“g”,它根据列中的连续序列对数据进行分类。也就是说,如最后一列“g”所示,h_no

  • 问题内容: 表名称调用 上面是一个示例,我需要找出的是如何找到连续无应答计数大于6的数字? 目前,我已经能够获得以下信息,但它不是连续的。 问题答案: 您可以使用变量来执行此操作。 该查询使用4个变量 1)@cur_outcome,它最初设置为空字符串。此后,选择将分配当前行的system_outcome。 2)@prev_outcome,最初设置为空字符串。此后,选择将其设置为@cur_outc