我需要查看我的数据集并找到满足某些条件的所有值。我试过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