【问题标题】:selecting row matching condition, and also one row above and one row below选择行匹配条件,上一行下一行
【发布时间】:2020-12-28 00:23:58
【问题描述】:

我正在尝试选择满足条件的 Dataframe 中的行,以及它之前和之后的行(即使这些行不满足条件。)

条件是df['col1']中的值小于100

idx=df.index[df['col1']<100]

df.loc[idx] 给我所有符合条件 df['col1'] 的行

为了同时获得上一行和下一行,我尝试使用df.iloc[idx-1:idx+1] 进行切片,但收到错误消息

TypeError: 不能在 与这些索引器 [Int64Index([ 23362, 23363, 23364, 23365, 23366, 23367, 23368, 23369, 23370, 23371, ... 129089、129154、129155、129156、129157、129158、129159、129160、 129161, 129162], dtype='int64', length=7851)]

【问题讨论】:

    标签: python pandas indexing slice


    【解决方案1】:

    你已经有了bool所以不需要用index过滤它,我们可以用shift做掩码

    m = df['col1']<100
    df = df[m.shift(-1)|m.shift()|m]
    

    【讨论】:

    • 哦,哇,是的。这行得通。 (我使用~,因为我实际上是想删除符合条件的行)df=df.loc[~(mask.shift(-1)|mask.shift(+1)|mask)] 顺便问一下,您对何时使用掩码以及何时使用索引和位置的建议是什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-14
    • 1970-01-01
    • 1970-01-01
    • 2021-05-30
    • 2010-12-30
    • 2020-02-21
    • 1970-01-01
    相关资源
    最近更新 更多