python - 如何比较两行并通过Python中的索引获取结果?
问题描述
我有一个数据框
Day Value
1 Mon 0
2 Mon 1
3 Fri 1
4 Mon 1
5 Mon 1
6 Mon 1
7 Mon 0
8 Tue 1
9 Tue 1
我想通过 Grouping with Day 列找到具有两个连续 1 的行。
预期输出:
Day Value
5 Mon 1
6 Mon 1
9 Tue 1
解决方案
用于boolean indexing
过滤:
m = df['Value'].eq(1)
s = df['Day'].ne(df['Day'].shift()).cumsum()
df = df[s[m].duplicated() & m]
print (df)
Day Value
5 Mon 1
6 Mon 1
9 Tue 1
详情:
Series.shift
首先使用andSeries.ne
和 和创建连续系列Series.cumsum
:
print (df['Day'].ne(df['Day'].shift()).cumsum())
1 1
2 1
3 2
4 3
5 3
6 3
7 3
8 4
9 4
Name: Day, dtype: int32
1
然后按以下值过滤Value
:
print (s[m])
2 1
3 2
4 3
5 3
6 3
8 4
9 4
Name: Day, dtype: int32
并获得Series.duplicated
所有Series
被称为帮助者的骗局s
:
print (s[m].duplicated())
2 False
3 False
4 False
5 True
6 True
8 False
9 True
Name: Day, dtype: bool
最后一个链与按位与&
与原始相同大小的掩码:
print (s[m].duplicated() & m)
1 False
2 False
3 False
4 False
5 True
6 True
7 False
8 False
9 True
dtype: bool
推荐阅读
- excel - 无法连接到 OneDrive 中的 Excel 文件
- origen-sdk - 从修订控制中省略文件或目录?
- file - 在 Julia 中以未知的顺序同时写入或读取多个文件
- bash - 打印 bash 脚本中使用的所有变量
- java - 将 Spring Boot 应用程序部署到 Elastic Beanstalk 时出现 502 Bad Gateway
- python - 横河示波器的 Pyvisa 解码问题
- javascript - Azure JavaScript 函数输出到服务总线队列
- python-3.x - pyAlsaaudio 在 openSUSE 上安装
- .net - discord.net 如何转换为 IEmote
- c++ - Qt moveToThread 仅在第一次工作