从索引直到条件从 Pandas DataFrame 中获取行

Posted

技术标签:

【中文标题】从索引直到条件从 Pandas DataFrame 中获取行【英文标题】:Get rows from Pandas DataFrame from index until condition 【发布时间】:2019-02-18 08:45:22 【问题描述】:

假设我有一个 Pandas DataFrame:

x = pd.DataFrame(data=[5,4,3,2,1,0,1,2,3,4,5],columns=['value'])
x
Out[9]: 
    value
0       5
1       4
2       3
3       2
4       1
5       0
6       1
7       2
8       3
9       4
10      5

现在,给定索引,我想在x 中查找行,直到满足条件。 例如,如果index = 2:

x.loc[2]
Out[14]: 
value    3
Name: 2, dtype: int64

现在我想从那个index 中找到下一个n 值大于某些threshold 的行。例如,如果threshold is 0,结果应该是:

x
Out[9]: 
    value
2       3
3       2
4       1
5       0

我该怎么做?

我试过了:

x.loc[2:x['value']>0,:]

但这当然行不通,因为x['value']>0 返回一个布尔数组:

Out[20]: 
0      True
1      True
2      True
3      True
4      True
5     False
6      True
7      True
8      True
9      True
10     True
Name: value, dtype: bool

【问题讨论】:

x.loc[x['value']>0] 怎么样?您可以将其与iloc 的索引相结合以获得所需的结果。 @AdrianKeister 否,因为这将返回值大于 0 的所有行。 请看我的编辑。 【参考方案1】:

使用idxmin 和切片

x.loc[2:x['value'].gt(0).idxmin(),:]

2    3
3    2
4    1
5    0
Name: value

编辑:

对于一般公式,请使用

index = 7
threshold = 2
x.loc[index:x.loc[index:,'value'].gt(threshold).idxmin(),:]

根据您在 cmets 中的描述,您似乎想从 index+1 开始而不是索引。所以,如果是这种情况,只需使用

x.loc[index+1:x.loc[index+1:,'value'].gt(threshold).idxmin(),:]

【讨论】:

我相信你听过很多,但你是个天才。谢谢老兄。 很高兴我能帮上忙!快乐编码 ;)【参考方案2】:

您要过滤大于index=2 的索引和x['value']>=threshold,然后选择这些行中的第一个n,这可以通过.head(n) 完成。

说:

idx = 2
threshold = 0
n = 4
x[(x.index>=idx) & (x['value']>=threshold)].head(n)

输出:

#      value
# 2     3
# 3     2
# 4     1
# 5     0

编辑:更改为 >=,并更新示例以匹配 OP 的示例。

由于 OP 的澄清,编辑 2:因为 n 未知:

idx = 2
threshold = 0
x.loc[idx:(x['value']<=threshold).loc[x.index>=idx].idxmax()]

这是从开始的idx,在本例中为idx=2,直到并包括不满足条件的第一行(在本例中为索引5)。

【讨论】:

我不知道n 是什么。我需要从索引中搜索直到满足条件并返回找到的行。如果我知道n 是什么,我可以做x.loc[idx:n,:] :)

以上是关于从索引直到条件从 Pandas DataFrame 中获取行的主要内容,如果未能解决你的问题,请参考以下文章

pandas如何设置索引从0开始,pandas如何恢复默认索引,DataFrame如何恢复隐式索引

如何从 Pandas 日期时间索引中删除尾随零(根据需要格式化)?

如何从 Pandas DataFrame 中获取值而不是索引和对象类型

如何从包含Python3中特定索引和列的列表的dict创建Pandas DataFrame?

Python Pandas 向DataFrame中添加一行/一列

python中Pandas之DataFrame索引选取数据