首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >创建一个列,计数多个索引上的连续真值。

创建一个列,计数多个索引上的连续真值。
EN

Stack Overflow用户
提问于 2022-04-12 02:02:15
回答 1查看 71关注 0票数 0

设df是带有两列索引的布尔值的数据格式。我想计算每个id的值。例如,这就是它对这一具体情况的看法。

代码语言:javascript
运行
复制
              value   consecutive 
    id  Week           
     1  1     True     1
     1  2     True     2   
     1  3     False    0      
     1  4     True     1
     1  5     True     2
     2  1     False    0
     2  2     False    0
     2  3     True     1

这是我的解决方案

代码语言:javascript
运行
复制
def func(id,week):
    M = df.loc[id]
    M= df.loc[id][:week+1]

    consecutive_list = list()
    S=0
    for index,row in M.iterrows():
        if row['value']:
            S+=1
        else:
            S=0
        consecutive_list.append(S)
    return consecutive_list[-1]

然后,我们以下列方式生成列“连续”作为列表:

代码语言:javascript
运行
复制
Consecutive_list = list()
for k in df.index:
    id = k[0]
    week=k[1]
    Consecutive_list.append(func(id,week))

df['consecutive'] = Consecutive_list

我想知道是否有更多的毕达通的方法来做到这一点。

编辑:我写了“连续”一栏,以显示我期望的是什么。

EN

回答 1

Stack Overflow用户

发布于 2022-04-12 03:17:00

如果您试图将连续列添加到df中,则应该可以这样做:

代码语言:javascript
运行
复制
df.assign(consecutive = df['value'].groupby(df['value'].diff().ne(0).cumsum()).cumsum())

输出:

代码语言:javascript
运行
复制
     value  consecutive
1 a   True            1
  b   True            2
2 a  False            0
  b   True            1
3 a   True            2
  b  False            0
4 a  False            0
  b   True            1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71836182

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档