2017-10-12 111 views
1

我在四舍五入方面存在问题,这似乎很常见,但我无法通过Google搜索找到答案,所以我决定在这里问一下。圆形转换为熊猫字符串

这里是我的数据

 day   reg  log ad  trans paid 
1111 20171005 172  65 39.0 14.0 3.0 
1112 20171006 211  90 46.0 17.0 4.0 
1113 20171007 155  70 50.0 17.0 1.0 
1114 20171008 174  71 42.0 18.0 0.0 
1115 20171009 209  63 43.0 21.0 2.0 

下面是我做什么,我还是想%数量

table['% log'] = (table.log/table.reg * 100).astype(str) + '%' 
table['% ad'] = (table.ad/table.reg * 100).astype(str) + '%' 
table['% trans'] = (table.trans/table.reg* 100).astype(str) + '%' 
table['% paid'] = (table.paid/table.reg * 100).astype(str) + '%' 

这是我得到的,需要一个最终的触摸围捕

 day   reg  log ad  trans paid % log   % ad  % trans  % paid 
1111 20171005 172  65 39.0 14.0 3.0  37.7906976744% 22.6744186047% 8.13953488372% 1.74418604651% 
1112 20171006 211  90 46.0 17.0 4.0  42.654028436% 21.8009478673% 8.05687203791% 1.89573459716% 
1113 20171007 155  70 50.0 17.0 1.0  45.1612903226% 32.2580645161% 10.9677419355% 0.645161290323% 
1114 20171008 174  71 42.0 18.0 0.0  40.8045977011% 24.1379310345% 10.3448275862% 0.0% 
1115 20171009 209  63 43.0 21.0 2.0  30.1435406699% 20.5741626794% 10.04784689% 0.956937799043% 

我想要的是百分比不是太长,只是两位数字。

回答

2

您需要round

table['% log'] = (table.log/table.reg * 100).round(2).astype(str) + '%' 

更好的办法是选择由子集和输出join所有列原始df

cols = ['log','ad','trans','paid'] 
table =(table.join(table[cols].div(table.reg, 0) 
           .mul(100) 
           .round(2) 
           .astype(str) 
           .add('%') 
           .add_prefix('%% '))) 
print (table) 
      day reg log ad trans paid % log % ad % trans % paid 
1111 20171005 172 65 39.0 14.0 3.0 37.79% 22.67% 8.14% 1.74% 
1112 20171006 211 90 46.0 17.0 4.0 42.65% 21.8% 8.06% 1.9% 
1113 20171007 155 70 50.0 17.0 1.0 45.16% 32.26% 10.97% 0.65% 
1114 20171008 174 71 42.0 18.0 0.0 40.8% 24.14% 10.34% 0.0% 
1115 20171009 209 63 43.0 21.0 2.0 30.14% 20.57% 10.05% 0.96% 

此外,如果需要更好的输出 - 2位小数添加0

table =(table.join(table[cols].div(table.reg, 0) 
           .mul(100) 
           .applymap("{0:.2f}".format) 
           .add('%') 
           .add_prefix('%% '))) 
print (table) 
      day reg log ad trans paid % log % ad % trans % paid 
1111 20171005 172 65 39.0 14.0 3.0 37.79% 22.67% 8.14% 1.74% 
1112 20171006 211 90 46.0 17.0 4.0 42.65% 21.80% 8.06% 1.90% 
1113 20171007 155 70 50.0 17.0 1.0 45.16% 32.26% 10.97% 0.65% 
1114 20171008 174 71 42.0 18.0 0.0 40.80% 24.14% 10.34% 0.00% 
1115 20171009 209 63 43.0 21.0 2.0 30.14% 20.57% 10.05% 0.96% 
+1

哦,这很容易 –