2017-12-01 13 views
0

私は(0.12,0.14,0.16,0.13,0.23,0.25,0.28,0.32,0.33)のような列を持つDataframeを持っています。値の変化を0.1または-0.1以上だけ記録する。そして、他の値は変更されても変わりません。Python Dataframe findの行の値が10%ごとに変化する

ので、新しい列は、誰でも簡単に作成する方法を知っている

(0.12,0.12,0.12,0.12,0.23,0.23,0.23,0.32,0.32)のようにすべきですか?

ありがとうございます。

+0

値が0.23に変更された場合、後ろの値は0.23ではなく0.12と比較され、0.32 ..... – user7544575

答えて

1

データを任意の数値に丸めることで、これで何を達成しようとしているのか分かりません。あなたは中間点にround機能のいずれかを検討したい、または10

あなたはしかし、このように行うことができます達成しようとしている何

によって配列を乗算した後、/ floor機能をINGのceilを使用したことがあります

import numpy as np 

def cookdata(data): 
    #Assuming your data is sorted as per example array in your question 
    data = np.asarray(data) 
    i = 0 
    startidx = 0 
    while np.unique(data).size > np.ceil((data.max()-data.min())/0.1): 
     lastidx = startidx + np.where(data[startidx:] < np.unique(data)[0]+0.1*(i+1))[0].size 
     data[startidx:lastidx] = np.unique(data)[i] 
     startidx = lastidx 
     i += 1 
    return data 

をこれは、あなたの質問で尋ねられたようにデータセットを返します。

data = np.sort(np.random.uniform(0.12, 0.5, 10)) 
data 
array([ 0.12959374, 0.14192312, 0.21706382, 0.27638412, 0.27745105, 
     0.28516701, 0.37941334, 0.4037809 , 0.41016534, 0.48978927]) 

cookdata(data) 
array([ 0.12959374, 0.12959374, 0.12959374, 0.27638412, 0.27638412, 
     0.27638412, 0.37941334, 0.37941334, 0.37941334, 0.48978927]) 

この関数は、最初の値に基づいて配列を返します。

ただし、任意のデータポイントに対して丸め値を必要としない、より簡単な操作を検討したいことがあります。 np.round(data, decimals=1)を検討してください。ここで

data = np.asarray(data) 
datamin = data.min() 
data = np.floor((data-datamin)/0.1)*0.1+datamin 

data 
array([ 0.12959374, 0.12959374, 0.12959374, 0.22959374, 0.22959374, 
     0.22959374, 0.32959374, 0.32959374, 0.32959374, 0.42959374]) 

データではなく、最初の値の倍数の間の任意の値よりも、最初の値の倍数の通りです:あなたは初期値を維持したいnp.floor(data/0.1)*0.1場合や:のようにあなたのケースでは、あなたもfloor機能を使用することができます。

+0

私は後でExcelで解決しましたが、多くありがとうございます! – user7544575

関連する問題