如何在数据框列上应用上限?

apo*_*los 3 python arrays numpy rounding pandas

我有一个带有数字系列的数据框,如下所示。我怎样才能以 0.2 为步长来取消每个值?在 Excel 中这很简单,=CEILING(x, 0.2)但是 Python 呢?

df = pd.DataFrame({'A': [1, 1.3, 1.5, 1,6, 1.7, 2]})
Run Code Online (Sandbox Code Playgroud)

jpp*_*jpp 5

据我所知,这样的功能本身并不存在。

您可以使用 NumPy(归功于@DSM):

step = 0.2
df['B'] = np.ceil((df['A'].values / step)) * step
Run Code Online (Sandbox Code Playgroud)

性能较低的版本通过pd.Series.apply

import pandas as pd
import math

df = pd.DataFrame({'A': [1, 1.3, 1.5, 1,6, 1.7, 2]})

def ceil(x, step=1):
    return step * math.ceil(x/step)

df['B'] = df['A'].apply(ceil, step=0.2)

#      A    B
# 0  1.0  1.0
# 1  1.3  1.4
# 2  1.5  1.6
# 3  1.0  1.0
# 4  6.0  6.0
# 5  1.7  1.8
# 6  2.0  2.0
Run Code Online (Sandbox Code Playgroud)

  • 不过,使用“apply”会比“np.ceil((df/step))*step”等矢量化方法慢得多,对吗? (4认同)