2017-09-03 5 views
3

以下のコードを使用してデータフレーム列を作成しました。これを最も近い100番目に丸める方法を見つけようとしていました。pandas、numpyを100に近似します。

... 
# This prints out my new value rounded to the nearest whole number.  
df['new_values'] = (10000/df['old_values']).apply(numpy.floor) 

# How do I get it to round down to the nearest 100th instead? 
# i.e. 8450 rounded to 8400 

答えて

5

あなたはintに変換し、100除算を必要と100によって最後の倍数:

df['new_values'] = (df['old_values']/100).astype(int) *100 
と同じ

df['new_values'] = (df['old_values']/100).apply(np.floor).astype(int) *100 

サンプル:

df = pd.DataFrame({'old_values':[8450, 8470, 343, 573, 34543, 23999]}) 
df['new_values'] = (df['old_values']/100).astype(int) *100 
print (df) 
    old_values new_values 
0  8450  8400 
1  8470  8400 
2   343   300 
3   573   500 
4  34543  34500 
5  23999  23900 

EDIT:

df = pd.DataFrame({'old_values':[3, 6, 89, 573, 34, 23]}) 
#show output of first divide for verifying output 
df['new_values1'] = (10000/df['old_values']) 
df['new_values'] = (10000/df['old_values']).div(100).astype(int).mul(100) 
print (df) 
    old_values new_values1 new_values 
0   3 3333.333333  3300 
1   6 1666.666667  1600 
2   89 112.359551   100 
3   573 17.452007   0 
4   34 294.117647   200 
5   23 434.782609   400 
+0

が提供するソリューションへの非常に類似し@jezraelこんにちは、返信に感謝!もともと、私の 'new_values'は' 10,000/df ['old_values'] 'で計算されます。私はそれを回す場合は、私の計算は間違っています。メソッドを切り捨てる前に、まず計算を行う必要があるということですか? –

+0

私はちょっと混乱していますが、 '(10000/df ['old_values'])'の代わりに '(df ['old_values']/10000)と思っていますか? – jezrael

+0

はい、私の 'new_values'は' 10000/df ['old_values'] 'の計算によって得られます。 'df ['old_values']/10000'を実行すると、結果は間違いなく変わります。 '2/3'と' 3/2'との違いと同様です。私の説明が理にかなってほしいのですか? –

0

私は数学モジュールに

a = [123, 456, 789, 145] 

def rdl(x): 
ls = [] 
for i in x: 
    a = math.floor(i/100)*100 
    ls.append(a) 
return ls 

rdl(a) 

#Output was [100, 200, 400, 700, 100]

を使用して似たような試みたが、これはいくつかのアイデアを提供します願っています。 @jezrael

2

借入の@ jezraelのサンプルデータフレーム

df = pd.DataFrame({'old_values':[8450, 8470, 343, 573, 34543, 23999]}) 

使用floordivまたは//

df // 100 * 100 

    old_values 
0  8400 
1  8400 
2   300 
3   500 
4  34500 
5  23900 
関連する問題