我有一个数据框
A B C
1 2 3
2 3 4
3 8 7
我只想选择C列中顺序为3,4的行(在这种情况下-前两行)
这样做的最佳方法是什么?
答案 0 :(得分:2)
您可以将rolling
用于使用任何模式的常规解决方案:
pat = np.asarray([3,4])
N = len(pat)
mask= (df['C'].rolling(window=N , min_periods=N)
.apply(lambda x: (x==pat).all(), raw=True)
.mask(lambda x: x == 0)
.bfill(limit=N-1)
.fillna(0)
.astype(bool))
df = df[mask]
print (df)
A B C
0 1 2 3
1 2 3 4
说明:
rolling.apply
和测试模式0
替换为mask
的NaN
bfill
和limit
来填充上一个倒数第一个NANs值fillna
NaN
到0
astype
投给bool的人答案 1 :(得分:2)
使用shift
In [1085]: s = df.eq(3).any(1) & df.shift(-1).eq(4).any(1)
In [1086]: df[s | s.shift()]
Out[1086]:
A B C
0 1 2 3
1 2 3 4