我的目标是在特定值上对df进行子集。使用下文,这些记录在items
中,即B
和D
。我还希望对B
和D
前面的行进行子集,它们记录在other_items
(X
,Y
)中。注意:我只想返回B
或D
之前的最后一项。所以它们在{
本质上,查找包含B
或D
的每一行,并返回前面最后一行,该行等于X
或Y
。问题是它可能在1-10行之间
import pandas as pd
df = pd.DataFrame({
'Val' : [1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4],
'ID' : ['X','Y','B','X','C','X','C','D','E','Y','Y','A','B','C','X','C','Y','D','E','A'],
})
items = ['B','D']
other_items = ['X','Y']
df = df.loc[(df['ID'].isin(items)) | df['ID'].shift(-1).isin(items) & (df['ID'].isin(other_items))]
预期产出:
Val ID
1 1 Y
2 1 B
5 2 X
7 2 D
10 3 Y
12 3 B
16 4 Y
17 4 D
首先按两个列表的总和仅筛选行,然后按上一个和下一个值筛选:
如果需要按组处理:
最后一个过滤器:
相关问题 更多 >
编程相关推荐