python - 将数据框中的整列向上或向下舍入

标签 python pandas

        A
0  31.353
1  28.945
2  17.377

我想创建一个新的 df["B"],其中 A 列值向上舍入为 5。 所需的输出:

        A      B
0  31.353   35.0
1  28.945   30.0
2  17.377   20.0

我已经尝试过:

def roundup5(x):
    return int(math.ceil(x / 5.0)) * 5
df["B"] = df["A"].apply(roundup5)

我得到:

TypeError: unsupported operand type(s) for /: 'str' and 'float'

最佳答案

我认为你需要先将值转换为float,然后划分并使用 numpy.ceil与多个:

df["B"] = df["A"].astype(float).div(5.0).apply(np.ceil).mul(5)

df["B"] = np.ceil(df["A"].astype(float).div(5.0)).mul(5)

循环版本:

def roundup5(x):
    return int(math.ceil(float(x) / 5.0)) * 5.0
df["B"] = df["A"].apply(roundup5)

print (df)
        A     B
0  31.353  35.0
1  28.945  30.0
2  17.377  20.0

时间:

[30000 rows x 1 columns]
df = pd.concat([df] * 10000, ignore_index=True)

In [327]: %timeit df["B1"] = df["A"].apply(roundup5)
35.7 ms ± 4.54 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

In [328]: %timeit df["B2"] = df["A"].astype(float).div(5.0).apply(np.ceil).mul(5)
1.25 ms ± 76.7 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

In [329]: %timeit df["B3"] = np.ceil(df["A"].astype(float).div(5.0)).mul(5)
1.19 ms ± 22.6 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

关于python - 将数据框中的整列向上或向下舍入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49084687/

相关文章:

python - 如何正确设置 json 文件中的重复字段

python - Dask Dataframe 独特操作 : Worker running out of memory (MRE)

python - 使用 dataframe.merge 后行数意外增加

python - Pandas - 将两列转换为一个新列作为字典

python - 如何选择水平 Lollipop 图/哑铃图的最小值和最大值?

python - PyTorch:将向量的所有元素归零,除了前 k 个?

python - 检查字典键是否在字典列表(元组)中

python - 扭曲的克莱因 : Synchronous behavior

python - 在Python中计算每行中特定列的接下来3行的最大值

python - 从 Pandas DataFrame 快速填充大型 Numpy 矩阵