熊猫-如何通过对多个列值进行正则表达式比较来过滤数据框

时间:2018-07-06 22:07:33

标签: python pandas

我有一个如下数据框,其中所有内容都格式化为字符串:

df
  property  value  count
0   propAb   True     10
1   propAA  False     10
2   propAB   blah     10
3   propBb      3      8
4   propBA      4      7
5   propCa    100      4

我正在尝试通过将一系列正则表达式样式的规则应用于属性和值列的方法来寻找一种过滤数据框的方法。

例如,一些示例规则可能如下:

  • “如果属性以'propA'开头并且值不是'True',则删除该行”。

另一个规则可能是更数学的东西,例如:

  • “如果属性以'propB'开头且值<4,则删除该行”。

是否有一种方法可以完成这样的事情,而不必每次都针对我要应用的每个规则遍历所有行?

2 个答案:

答案 0 :(得分:2)

您仍然必须应用每个规则(还有其他规则),但是让熊猫来处理行。另外,不要删除不喜欢的行,而要保留行。这是一个如何应用前两个规则的示例:

rule1 = df.property.str.startswith('propA') & (df.value != 'True')
df = df[~rule1] # Keep everything that does NOT match
rule2 = df.property.str.startswith('propB') & (df.value < 4)
df = df[~rule2] # Keep everything that does NOT match

顺便说一句,第二条规则将不起作用,因为value不是数字列。

答案 1 :(得分:0)

第一个:

def approx_multivariate_cdf(dist, bound, num_samples=int(100e3), seed=None):
  s = dist.sample(num_samples, seed=seed)
  in_box = tf.cast(tf.reduce_all(s <= bound, axis=-1), dist.dtype)
  return tf.reduce_mean(in_box, axis=0)

和另一个:

df = df.drop(df[(df.property.startswith('propA')) & (df.value is not True)].index)