熊猫数据框按特定列中的值顺序过滤

时间:2018-09-05 10:46:16

标签: pandas dataframe data-science data-munging

我有一个数据框

A B C

1 2 3

2 3 4

3 8 7

我只想选择C列中顺序为3,4的行(在这种情况下-前两行)

这样做的最佳方法是什么?

2 个答案:

答案 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替换为maskNaN
  • 使用bfilllimit来填充上一个倒数第一个NANs值
  • fillna NaN0
  • 最后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