Python Dataframe查找每10%更改一次的行值

时间:2017-12-01 08:04:42

标签: python dataframe row calculated-columns

我有一个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)

任何人都知道如何以简单的方式写作?

非常感谢。

1 个答案:

答案 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

这里的数据是第一个值的倍数,而不是第一个值的倍数之间的任意值。