python - 仅选择存在特定值的底部连续行 Pandas
问题描述
我有这个数据框
lst = [['A',1],['B',0],['C',1],['D',0],['E',1],['F',1],['G',1]]
df = pd.DataFrame(lst,columns = ['name','val'])
看起来像这样
name val
0 A 1
1 B 0
2 C 1
3 D 0
4 E 1
5 F 1
6 G 1
我想得到val
1 的行,但它们应该是底部连续的行。
期望的输出
name val
4 E 1
5 F 1
6 G 1
我正在做,这将给所有 val 1。
df[df.val == 1]
解决方案
您可以使用cumsum
获取最后一个块:
# blocks separated by `0`
s = df.val.ne(1).cumsum()
# last blocks and only value 1
df[s.eq(s.max()) & df['val'].eq(1)]
输出:
name val
4 E 1
5 F 1
6 G 1
推荐阅读
- spring - 春云 Greenwich x Hoxton x Ilford
- freeswitch - FreeSWITCH:使用 origin_retries 的尝试次数错误
- r - 如何从 R 下的时间序列数据中识别降雨“非事件”?
- powerbi - 使用列过多的 Power Bi
- leaflet - 只有一些标记显示
- ios - SwiftUI 无法打开详细信息屏幕
- bluetooth - 我应该使用 BLE(蓝牙 5)还是经典蓝牙?
- python - VMTK - 使用安装在 conda 中的 VMTK 计算中心线
- node.js - Node.js 响应无需等待一些操作
- automated-tests - 以编程方式从表中选择链接