过滤后在熊猫中选择前一行的语法
Posted
技术标签:
【中文标题】过滤后在熊猫中选择前一行的语法【英文标题】:Syntax to select previous row in pandas after filtering 【发布时间】:2018-12-04 15:41:23 【问题描述】:我有一个 pd.DataFrame df
有 5 行,比如说:
Row Value
1 32
2 25
3 10
4 18
5 21
假设我使用过滤器df[df['Value'] < 15]
,这应该返回
Row Value
3 10
我的问题是,我想在此过滤器返回 True 之前访问该行的值,在此示例中,我希望函数返回值 25(来自第 2 行)。
我的最终目标是应用条件,获取上面的行,然后测试该行是否有其他条件。
我可以使用哪些 pandas 函数?
谢谢!
【问题讨论】:
【参考方案1】:将蒙版上移 1。
df[(df['Value'] < 15).shift(-1).fillna(False)]
Row Value
1 2 25
更一般地说,如果您要查找所有大于 15 的行,其下一行小于 15,您可以计算两个单独的掩码并将它们与:
df[(df['Value'].shift(-1) < 15) & (df['Value'] > 15)]
Row Value
1 2 25
【讨论】:
谢谢!如果我想更进一步并检查该值是否高于 15,该怎么办? @AdrianYdf[(df['Value'] > 15).shift(-1).fillna(False)]
?
对不起,我应该更清楚。我的意思是检查第 2 行中的值是否高于 15。df[(df['Value'] > 15).shift(-1).fillna(False)]['Value'] >15 是否有效?【参考方案2】:
np.flatnonzero
找到掩码在哪里True
然后减一
df.iloc[np.flatnonzero(df.Value < 15) - 1]
Row Value
1 2 25
【讨论】:
【参考方案3】:使用idxmax
>>> df.iloc[df.Value.le(15).idxmax() - 1]
Row 2
Value 25
【讨论】:
【参考方案4】:使用nonzero
df.iloc[(df['Value'] < 15).nonzero()[0]-1]
Out[34]:
Row Value
1 2 25
【讨论】:
我不知道.nonzero
我只有袋子可以放进去。
@piRSquared 我的包不够大,放不下你展示给我的所有美丽 :-)
你太客气了。你学到了很多技巧,也向我展示了一些技巧(-:以上是关于过滤后在熊猫中选择前一行的语法的主要内容,如果未能解决你的问题,请参考以下文章