python - 在 Pandas 的一列中具有布尔条件 True 的 Groupby
问题描述
这是我想使用 groupby 的数据框
Value Boolean1 Boolean2
5.175603 False False
5.415855 False False
5.046997 False False
4.607749 True False
5.140482 False False
1.796552 False False
0.139924 False True
4.157981 False True
4.893860 False False
5.091573 False False
6 True False
6.05 False False
我想groupby
与Boolean1 and Boolean2
列一起使用。groupby
继续从到,False
除非它找到True
并检查两列,然后再次检查下一个 False 到 True。如果不再存在 True,那么它可以忽略 False 的其余部分(与其对应的值),或者它可以存在
我想达到类似的效果。
Value Boolean1 Boolean2
这是一组
5.175603 False False
5.415855 False False
5.046997 False False
4.607749 True False
这是另一个
5.140482 False False
1.796552 False False
0.139924 False True
4.157981 False True
这是另一个
4.893860 False False
5.091573 False False
6 True False
解决方案
我的想法是False
在至少一列之前检查两列中的 s True
:
#chain condition together by OR and invert
m = ~(df['Boolean1'] | df['Boolean2'])
#get consecutive groups with AND for filter only Trues
#(because inverting, it return False in both cols)
s = (m.ne(m.shift()) & m).cumsum()
for i, x in df.groupby(s):
print (x)
dtype: int32
Value Boolean1 Boolean2
0 5.175603 False False
1 5.415855 False False
2 5.046997 False False
3 4.607749 True False
Value Boolean1 Boolean2
4 5.140482 False False
5 1.796552 False False
6 0.139924 False True
7 4.157981 False True
Value Boolean1 Boolean2
8 4.893860 False False
9 5.091573 False False
10 6.000000 True False
Value Boolean1 Boolean2
11 6.05 False False
详情:
print (m)
0 True
1 True
2 True
3 False
4 True
5 True
6 False
7 False
8 True
9 True
10 False
11 True
dtype: bool
print (s)
0 1
1 1
2 1
3 1
4 2
5 2
6 2
7 2
8 3
9 3
10 3
11 4
dtype: int32
推荐阅读
- python - Pygame矩形绘图问题
- javascript - ELECTRON - 加载包含脚本标签的本地 HTML 文件
- c - 捕获 WM_CHAR 消息时如何检测 UNICODE 字符?
- npm - NPM 脚本条件不适用于 Windows,但适用于 Linux 和 Mac
- python - 在 Ubuntu 中重新启动 tmux 会话(运行 Python)
- python - “conda install”命令中c标志的用途是什么
- java - 嵌套副本构造期间的 NullPointerException
- java - 使用 Java 8 安装 RichTextFX 时出现 Gradle 错误
- php - 唯一 id 用户团队排名 php/json
- php - 使用while循环将列保持在同一行,直到标题结果不同