首页 > 解决方案 > 根据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中制作它?谢谢

标签: pythonpandasstatisticsrowsfrequency

解决方案


done通过从后面的累积总和比较值和创建组,最后为原始列顺序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

推荐阅读