2017-10-12 13 views
1

丸めに問題がありますが、これは一般的なようですが、私はグーグルで答えを見つけることができません。ここでパンダで文字列に変換する前にラウンドする

はここ

 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桁の数字です。

答えて

2

あなたはroundを必要とする:

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['% log'] = (table.log/table.reg * 100).round(2).astype(str) + '%' 

より良い解決策は、元のdfにサブセットと出力joinですべての列を選択している

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

ああ、それは簡単です –

関連する問題