我在看this https://stackoverflow.com/questions/38802675/create-bool-mask-from-filter-results-in-pandas and this https://stackoverflow.com/questions/15315452/selecting-with-complex-criteria-from-pandas-dataframe线程,虽然我的问题并没有那么不同,但它有一些差异。我有一个充满的数据框floats
,我想用字符串替换。说:
A B C
A 0 1.5 13
B 0.5 100.2 7.3
C 1.3 34 0.01
对于这个表,我想用几个标准替换,但只有第一个替换有效:
df[df<1]='N' # Works
df[(df>1)&(df<10)]#='L' # Doesn't work
df[(df>10)&(df<50)]='M' # Doesn't work
df[df>50]='H' # Doesn't work
如果我根据以下内容选择第二行float
,仍然不起作用:
((df.applymap(type)==float) & (df<10) & (df>1)) #Doesn't work
我想知道如何申请pd.DataFrame().mask
在这里,或者任何其他方式。我应该如何解决这个问题?
或者,我知道我可以逐列阅读并在每个系列上应用替换,但这似乎有点适得其反
编辑:谁能解释一下为什么上面的 4 个简单作业不起作用?
Use numpy.select https://docs.scipy.org/doc/numpy/reference/generated/numpy.select.html with DataFrame
构造函数:
m1 = df < 1
m2 = (df>1)&(df<10)
m3 = (df>10)&(df<50)
m4 = df>5
vals = list('NLMH')
df = pd.DataFrame(np.select([m1,m2,m3,m4], vals), index=df.index, columns=df.columns)
print (df)
A B C
A N L M
B N H L
C L M N
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)