我有一个Dataframe,它有一个像(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)
任何人都知道如何以简单的方式写作?
非常感谢。
答案 0 :(得分:1)
通过将数据四舍五入为任意数字,确实无法确定您要实现的目标。您可能需要将class Controller {
constructor() {
this.latlng = [-25.363882,131.044922];
}
getpos(event){
this.latlng = [event.latLng.lat(), event.latLng.lng()];
console.log(this.latlng);
}
}
angular.module('app', ['ngMap']).component('myMap', {
template: `
<ng-map center="-25.363882,131.044922" zoom="4" on-click="$ctrl.getpos($event)">
<marker position="{{$ctrl.latlng}}" title="Hello World!" on-dragend="$ctrl.getpos($event)"
animation="Animation.BOUNCE" animation="DROP" draggable="true">
</marker>
</ng-map>
{{$ctrl.latlng}}`,
controller: Controller
})
函数考虑到中点,或者在将数组乘以10后使用round
ing / ceil
函数。
你想要实现的目标可以这样做:
floor
这将返回您问题中询问的数据集。我相信有更好的方法可以做到:
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)
函数,如:floor
或者如果您想保留初始值:
np.floor(data/0.1)*0.1
这里的数据是第一个值的倍数,而不是第一个值的倍数之间的任意值。