在Pandas DataFrame中保留指定值首次出现前的所有行
在Pandas DataFrame中保留指定值首次出现前的所有行
嗨,我来帮你搞定这个需求!你想要保留DataFrame里某个值首次出现之前的所有行,刚好有两种简单好用的方法,我给你详细说说:
方法一:定位首次出现位置后切片
这种方法思路很直接——先找到目标值第一次出现的索引位置,再通过索引切片提取前面的行。
首先我们先构造你给出的示例DataFrame:
import pandas as pd data = { 'Year': [1997, 1998, 1999, 2000, 2001], 'ID': [1, 2, 3, 4, 5], 'Count': [0, 0, 1, 0, 1] } df = pd.DataFrame(data)
接下来定位目标值(这里是1)首次出现的索引:
# 筛选Count列等于1的行,取第一个匹配项的索引 first_occur_idx = df['Count'].eq(1).idxmax()
最后通过索引切片获取结果(注意切片是左闭右开,所以[:first_occur_idx]不会包含首次出现1的那一行):
result = df.iloc[:first_occur_idx]
方法二:用累积求和快速筛选
这种方法更简洁,一行代码就能搞定。核心思路是利用cumsum()(累积求和)的特性:在目标值首次出现前,累积求和的结果始终是0,一旦出现目标值,累积和就会变成1,之后无论后续值是0还是1,累积和都不会再回到0。
直接上代码:
result = df[df['Count'].cumsum() == 0]
运行以上任意一种方法,你都会得到想要的结果:
Year ID Count 0 1997 1 0 1 1998 2 0
两种方法都能完美满足需求,第一种更直观,适合需要明确查看首次出现位置的场景;第二种更简洁,适合快速实现需求。
备注:内容来源于stack exchange,提问作者PV8
相关产品推荐
相关产品推荐

