我在查看this和this个帖子,虽然我的问题并没有那么不同,但它有一些不同之处。我的数据框已满page {
background: #fff;
display: block;
margin: 0 auto;
margin-bottom: 0.5cm;
box-shadow: 0 0 0.5cm rgba(0, 0, 0, 0.5);
position: relative;
}
page[size="A4"] {
width: 21cm;
min-height: 29.7cm;
}
page[size="A4"][layout="portrait"] {
width: 29.7cm;
min-height: 21cm;
}
@media print {
body {
visibility: hidden;
}
page[size="A4"]>* {
visibility: visible;
}
}
.col-md-3 img {
height: 100%;
width: 100%;
}
,我想用字符串替换。说:
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
。我该怎么解决这个问题?
或者,我知道我可以逐列阅读并在每个系列中应用替换,但这似乎有点适得其反
编辑:有人可以解释为什么上面的4个简单作业不起作用吗?
答案 0 :(得分:12)
将numpy.select
与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
答案 1 :(得分:7)
使用pd.cut
pd.cut(df.stack(),[-1,1,10,50,np.inf],labels=list('NLMH')).unstack()
Out[309]:
A B C
A N L M
B N H L
C L M N
答案 2 :(得分:6)
您可以使用 searchsorted
labels = np.array(list('NLMH') )&#xA; breaks = np.array([1,10,50])&#xA; pd.DataFrame(&#xA; labels [breaks.searchsorted(df.values)]。reshape(df.shape), &#xA; df.index,df.columns)&#xA;&#xA; AB C&#xA; ANL M&#xA; BNH L&#xA; CLM N&#xA;
&#xA;&#xA; labels = np.array(list('NLMH'))&#xA; breaks = np.array([1,10,50] )&#xA; df [:] =标签[breaks.searchsorted(df.values)]。reshape(df.shape)&#xA; df&#xA;&#xA; AB C&#xA; ANL M&#xA; BNH L&#xA; CLM N&#xA;
&#xA;&#xA; pandas.DataFrame.mask
自版本0.21后弃用
&#xA;&#xA; df.mask(df.lt(1),'N')。mask(df.gt(1)&amp; df.lt(10),'L')\&#xA; .mask(df.gt(10)&amp; df.lt(50),'M')。mask(df.gt(50),'H')&#xA;&#xA; A B C&#xA; A N L M&#xA; B N H L&#xA; C L M N&#xA;
&#xA;