我有一个名为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 ,...
中的行。有没有直接的方法可以做到这一点?谢谢
答案 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)]