为了账号安全,请及时绑定邮箱和手机立即绑定

根据python中列的标签创建groupby

根据python中列的标签创建groupby

海绵宝宝撒 2023-06-02 16:06:49
我有一个类似于这样的大型数据框:id        price             status1           23               none2           23               none3           34               none4           32               none5           31               none6           37               none7           20               none8           29               none9           21               none10          22               done我想根据状态进行分组。我想在这样的情况下建立一个组:每次状态完成时,它将成为一个组。到目前为止,我所做的是根据索引创建一个组:grouper = df.groupby(df.index // 10)但后来我意识到状态是随机写入的,并不总是每 10 行写入一次。我怎样才能在 python 中制作它?谢谢
查看完整描述

1 回答

?
慕娘9325324

TA贡献1783条经验 获得超4个赞

done通过 back by 的累积和比较值和 cretae 组iloc[::-1],最后添加另一个iloc[::-1]列的原始顺序:


g = df['status'].eq('done').iloc[::-1].cumsum().iloc[::-1]

grouper = df.groupby(g, sort=False)

样本:


#chnaged data for more groups   

print (df)

   id  price status

0   1     23   none

1   2     23   done

2   3     34   none

3   4     32   none

4   5     31   done

5   6     37   none

6   7     20   none

7   8     29   none

8   9     21   none

9  10     22   done


g = df['status'].eq('done').iloc[::-1].cumsum().iloc[::-1]

print (g)

0    3

1    3

2    2

3    2

4    2

5    1

6    1

7    1

8    1

9    1

Name: status, dtype: int32

grouper = df.groupby(g, sort=False)


for name, df in grouper:

    print (df)


   id  price status

0   1     23   none

1   2     23   done

   id  price status

2   3     34   none

3   4     32   none

4   5     31   done

   id  price status

5   6     37   none

6   7     20   none

7   8     29   none

8   9     21   none

9  10     22   done


查看完整回答
反对 回复 2023-06-02
  • 1 回答
  • 0 关注
  • 80 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信