根据python中列的标签创建groupby

我有一个类似于这样的大型数据框:


id        price             status

1           23               none

2           23               none

3           34               none

4           32               none

5           31               none

6           37               none

7           20               none

8           29               none

9           21               none

10          22               done

我想根据状态进行分组。我想在这样的情况下建立一个组:每次状态完成时,它将成为一个组。


到目前为止,我所做的是根据索引创建一个组:


grouper = df.groupby(df.index // 10)


但后来我意识到状态是随机写入的,并不总是每 10 行写入一次。


我怎样才能在 python 中制作它?谢谢


海绵宝宝撒
浏览 83回答 1
1回答

慕娘9325324

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 status0   1     23   none1   2     23   done2   3     34   none3   4     32   none4   5     31   done5   6     37   none6   7     20   none7   8     29   none8   9     21   none9  10     22   doneg = df['status'].eq('done').iloc[::-1].cumsum().iloc[::-1]print (g)0    31    32    23    24    25    16    17    18    19    1Name: status, dtype: int32grouper = df.groupby(g, sort=False)for name, df in grouper:    print (df)   id  price status0   1     23   none1   2     23   done   id  price status2   3     34   none3   4     32   none4   5     31   done   id  price status5   6     37   none6   7     20   none7   8     29   none8   9     21   none9  10     22   done
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python