对索引应用限制并缩小低于该限制的所有值

时间:2018-01-30 16:26:54

标签: pandas

给定一个带有形成箱子的数字索引的系列,是否有一个简单的函数可以将所有箱子值加到限制之下并将它们置于该系列的限制范围内?假设bin值不会均匀分布。

示例:

Input
Index: Val
0.1 : 0.1
0.2 : 0.1
0.3 : 0.1
0.4 : 0.1
0.5 : 0.1

Limit = 0.3


Output

0.1 : 0
0.2 : 0
0.3 : 0.3
0.4 : 0.1
0.5 : 0.1

我最好的尝试如下,但我觉得应该有一种更简单的方法来实现这一点。

import pandas as pd
import numpy as np

ser = pd.Series(data = [0.1]*10,
                index = pd.Float64Index([i/10 for i in range(1,11)]))
lim = 0.3

ser.loc[lim] = ser.loc[:lim].cumsum().iloc[-1]
ser.iloc[:np.asscalar(ser.index.get_indexer([lim]))] = 0

ser

1 个答案:

答案 0 :(得分:1)

这有点简单:

ser.loc[lim] = ser.loc[:lim].sum()
ser[:ser.loc[:lim].index[-2]] = 0

如果未包含索引,请使用get_loc()获取带有method='nearest'的索引并使用iloc进行索引:

lim = 0.35
ind = ser.index.get_loc(lim, method='nearest')
ser.iloc[ind] = ser.iloc[:ind+1].sum()
ser.iloc[:ind] = 0