我需要查看我的数据集并找到满足某些条件的所有值。我试过pandas.where(cond)仅接受一个条件。

例如,考虑以下数据集:

a    b    c     d

1    2    3     899

4    5    -344  21

7    8      9   10


我需要以下结果:0< data.values and data.values <30

a    b    c      d

1    2    3      Nan

4    5     Nan   21

7    8      9   10


大多数脚本返回符合条件的行或列。
但是,我需要每列和每行中其余的值。例如,我不想在第一行输掉2和3,在第二行输掉4和5。

最佳答案

创建boolean DataFrame并应用boolean indexing或将where'invert conditions'-<用于>=并将>用于<=

m = (df >= 0) & (df <= 30)
print (m)
      a     b      c      d
0  True  True   True  False
1  True  True  False   True
2  True  True   True   True

df = df[m]
#alternatively
#df = df.where(m)
print (df)
   a  b    c     d
0  1  2  3.0   NaN
1  4  5  NaN  21.0
2  7  8  9.0  10.0


numpy解决方案:

df = pd.DataFrame(np.where(m, df, np.nan), index=df.index, columns=df.columns)
print (df)
     a    b    c     d
0  1.0  2.0  3.0   NaN
1  4.0  5.0  NaN  21.0
2  7.0  8.0  9.0  10.0


或使用mask

m = (df < 0) | (df > 30)
df = df.mask(m)
print (df)

   a  b    c     d
0  1  2  3.0   NaN
1  4  5  NaN  21.0
2  7  8  9.0  10.0

10-07 18:51
查看更多