如何使用pandas dataframe基于某些条件从csv文件中过滤数据

时间:2017-12-04 04:42:30

标签: arrays python-2.7 pandas

我有以下数据。这些是卫星号码,它的状态和价值。 这里的状态值' B'正在改变0或某个值。的价值 状态' A'始终为0.星期六,状态A和Val = 0表示相应的状态' B'是不可接受的 而不算数。

我的目标是遍历每一行,并在每一行找到正确的卫星。如果任何行都是A或B = 0,则该行不计算。

所以我的愿望输出是:  α= 3,1,1,1  计数= 4,第4行不计算

sv-01   sv-02  SV-03  state-01 state-02 state-03    val-01   val-02  val-03
 7        12     8         B          B         B     .23     0.34    1.03
 7        12     8         B          B         A     .35     0       0
 7        12     8         B          A         A     1.45    0       0
 7        12     8         A          A         A      0      0       0
 7        12     8         A          B         B      0      0     3.21

#我的python实现是

  mask = read_data.filter(like='state').eq('A')
  result_count_Nj1 = mask.sum(axis=1).rsub(3)

#我试过了

mask = read_data.filter(like='state').eq('A')  and read_data.filter(like='state').eq('B'!=0)

#但它显示错误。请建议我犯错的地方

由于

1 个答案:

答案 0 :(得分:1)

我相信你需要:

#check B values
maskB = read_data.filter(like='state') == 'B'
print (maskB)
   state-01  state-02  state-03
0      True      True      True
1      True      True     False
2      True     False     False
3     False     False     False
4     False      True      True

#check not 0 values for B values only
mask0 = read_data.filter(like='val').where(maskB.values, 0) != 0
print (mask0)
   val-01  val-02  val-03
0    True    True    True
1    True   False   False
2    True   False   False
3   False   False   False
4   False   False    True

a = mask0.sum(1)
print (a)
0    3
1    1
2    1
3    0
4    1
dtype: int64

b = mask0.any(1).sum()
print (b)
4