如何在熊猫中经过过滤的行之后获取下一行

时间:2020-10-08 07:21:04

标签: python python-3.x pandas dataframe

我有一个名为Data Frame的{​​{1}}。我写了这个过滤器来过滤行:

Data

它返回了一些这样的行:

data[data["Grow"] >= 1.5]

如您所见,索引 PriceYesterday Open High Low ------------------------------------------------------------------ 7 6888.0 6881.66 7232.0 6882.0 53 7505.0 7555.72 7735.0 7452.0 55 7932.0 8093.08 8120.0 7974.0 64 7794.0 7787.29 8001.0 7719.0 ... 中有一些行。现在,我也想获取索引7, 53, 55 ,...中的行。有没有直接的方法可以做到这一点?谢谢

3 个答案:

答案 0 :(得分:3)

如果匹配最后一行并希望选择不存在的索引值,则可以使用Index.intersection来避免错误:

data = pd.DataFrame({
        'A':list('abcdef'),
         'B':[4,5,4,5,5,4],
         'Grow':[0,8,2,0.4,2,3.3],

})

df1 = data[data["Grow"] >= 1.5]
print (df1)
   A  B  Grow
1  b  5   8.0
2  c  4   2.0
4  e  5   2.0
5  f  4   3.3

df2 = data.loc[data.index.intersection(df1.index + 1)]
print (df2)
   A  B  Grow
2  c  4   2.0
3  d  5   0.4
5  f  4   3.3

另一个想法是通过将值移动Series.shift

来选择
df1 = data[data["Grow"] >= 1.5]
df2 = data[data["Grow"].shift() >= 1.5]
print (df2)
   A  B  Grow
2  c  4   2.0
3  d  5   0.4
5  f  4   3.3

df1 = data[data["Grow"] >= 1.5]
df2 = data.loc[df1.index + 1]
print (df2)
    

KeyError:“不再支持将带有任何丢失标签的列表赞传递给.loc或[]。缺少以下标签:Int64Index([6],dtype ='int64')。请参见https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#deprecate-loc-reindex-listlike"

答案 1 :(得分:0)

data[data.shift()["Grow"] >= 1.5]

该移位将每个单元格移动一步到帧的末尾。所以说:给我那些条目,这些条目符合我的标准。

答案 2 :(得分:0)

您应该创建一个遮罩,然后将该遮罩移动一个:

import numpy as np

df = pd.DataFrame({'a': np.random.random(20)})

print(df)
mask = df['a']>0.8
print("items that fit the mask:")
print(df.loc[mask])
print("items following these:")
print(df.loc[mask.shift().fillna(False)])

在您的特定情况下,我相信会

data.loc[(data["Grow"] >= 1.5).shift().fillna(False)]