2017-12-01 5 views
0

나는 (0.12,0.14,0.16,0.13,0.23,0.25,0.28,0.32,0.33)과 같은 열을 가진 데이터 프레임을 가지고 있습니다. 0.1 또는 -0.1 이상의 값 변경 만 기록하십시오. 그리고 다른 값은 변경 될 때 동일하게 유지됩니다. (0.12,0.12,0.12,0.12,0.23,0.23,0.23,0.32,0.32)파이썬 데이터 프레임 찾기 10 %마다 변경되는 행 값

누구나 간단한 방법으로 작성하는 방법을 알고 같은

그래서 새로운 열이되어야 하는가?

미리 감사드립니다.

+0

값이 0.23으로 변경되면 뒤에있는 값은 0.23이 아닌 0.12와 비교되며, 0.32 ..... – user7544575

답변

1

데이터를 임의의 숫자로 반올림하여이 목표를 달성하려는 것이 확실하지 않습니다.

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 

을 : 당신은 당신이 그러나 달성하기 위해 노력하고하는 것은 다음과 같이 수행 할 수 있습니다 (10)

에 의해 배열을 곱한 후/floor 기능을 보내고 round 중간 점 함수 또는 ceil를 사용하여 하나를 고려할 수 있습니다 귀하의 질문에 물어 데이터 집합을 반환합니다. 그것을 할 수있는 더 좋은 방법이 있다고 확신합니다 :

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

관련 문제