python - 根据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中制作它?谢谢
解决方案
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
推荐阅读
- tensorflow - 为什么我不能正确实现我的 TensorFlow while-loop?
- javascript - 为什么 ajax 不发布 csv 文件并在 html 标记中返回相同的 csv 文件
- c# - 正则表达式,从文件名中提取日期
- java - 为什么在嵌入式模式下尝试启动 apache Drill 时出现错误?
- gitlab - Gitlab管道连接符号未显示
- r - R中基于不规则间隔的生存数据表示
- json - 如何将 actix_web::web::Bytes 转换为 json?
- opencv - 有谁知道opencv中以下不推荐使用的函数的新名称?
- scala - 为什么 Scala Option.tapEach 返回 Iterable,而不是 Option?
- reactjs - 卸载组件时,其他组件中的钩子状态更改不是永久性的