2017-12-23 13 views
0

私はパンダのドキュメントと料理のレシピを検索しました。それは、dataframe.columnName.round(decimalplace)を使って簡単に最も近い小数点以下に丸めることができます。パンダで最も近い1000に丸めて

これをどのように大きな数値で行うのですか?

例では、私は住宅価格の列を持っており、それらを最も近い10000または1000などに丸めたいと思います。

dataframe.columnName.round(-3) 

例:

df.SalesPrice.WhatDoIDo(1000)? 
+2

が重複する可能性を1030?](https://stackoverflow.com/questions/39824914/how-do-i-round-to-the-nearest-ten) –

+1

1000で除算、1000で乗算する – Barmar

+0

多くの言語で繰り返しがありますこれを解決する方法。 SOに関する質問の「丸め方」の不足はありませんが、私はこのフレームワークの効率性を活用するための特定のパンダの方法を探していました。 – Angelo

答えて

2

表記df.ColumnName.round()を使用することにより、あなたが実際にpandas.Series.roundを呼び出している、のドキュメントは指定しています

小数:に四捨五入する小数点以下の桁

番号INT(デフォルト:0)。小数点が負の場合は、小数点の左側に位置する数を指定します。

だから、あなたが行うことができますように

0  0 
1  0 
2 100 
3 700 
Name: val, dtype: int64 

decimals=-3 1000へのラウンド、そして:これは出力を生成し

df = pd.DataFrame({'val':[1,11,130,670]}) 
df.val.round(decimals=-2) 

。特に、それはまたpandas.DataFrame.round()を使用して動作しますが、ドキュメントはあなたを教えてくれませんが:

df = pd.DataFrame({'val':[1,11,130,670], 'x':[1,11,150,900]}) 
df.round({'val':-2}) 

これは、最寄りの100に列valを丸め、それだけでxを残します。

+0

私は完全に「小数点が負の場合」という部分を見逃していました。本当にありがとう! – Angelo

1

あなたは小数点の左側の精度を指定したい場合のために、負の値を受け入れないこの

df = pd.DataFrame({'val':[1,11,130,670]}) 
10**df.val.astype(str).str.len() 
Out[27]: 
0  10 
1  100 
2 1000 
3 1000 
Name: val, dtype: int64 
0

機能roundを試すことができます。

>>> pd.Series([1, 500, 500.1, 999, 1500, 1501, 946546]).round(-3) 
0   0.0 
1   0.0 
2  1000.0 
3  1000.0 
4  2000.0 
5  2000.0 
6 947000.0 
dtype: float64 
0

もう1つの興味深い "ハック"はこれです:100番に近いほうに切り上げたいとしましょう。必要に応じて、あなたが50を追加することができ、その後、100で割る整数に変換し、100

df = pd.DataFrame({'val':[1005,1299,1301,4109]}) 
df.val.round(-2) # Proper way 
((df.val+50)/100).astype(int)*100 # Hack 

バック掛けることは、あなたにこれを与える:[どのように私は、最寄りに丸めるかの

[1000, 1300, 1300, 4100] 
関連する問題