首页 > 解决方案 > Pandas:对于大于 1 的值,如何舍入最接近整数的值?

问题描述

以下是数据框。我想对“期间”中最接近整数的值进行四舍五入。例如:1.005479452 四舍五入为 1.0000,2.002739726 四舍五入为 2.0000,3.002739726 四舍五入为 3.00000,5.005479452 四舍五入为 5.0000,12.01369863 四舍五入为 12.0000 等等。我有一个很大的清单。我正在尝试这样做,因为在以后的程序中,我必须基于“周期”列将此数据帧与其他数据帧连接起来。

 df =  period            rate
     0.931506849      -0.001469
     0.994520548       0.008677
     1.005479452       0.11741125
     1.008219178       0.073975
     1.010958904       0.147474833
     1.994520548      -0.007189219
     2.002739726       0.1160815
     2.005479452       0.06995
     2.008219178       0.026808
     2.010958904       0.1200695
     2.980821918      -0.007745727
     3.002739726       0.192208333
     3.010958904       0.119895833
     3.019178082       0.151857267
     3.021917808       0.016165
     3.863013699       0.005405321
     4                 0.06815
     4.002739726       0.1240695
     4.016438356       0.2410323
     4.019178082       0.0459375
     4.021917808       0.03161
     4.997260274       0.0682
     5.005479452       0.1249955
     5.01369863        0.03260875
     5.016438356       0.238069083
     5.019178082       0.04590625
     5.021917808       0.0120625
    12.01369863        0.136991
    12.01643836        0.053327917
    12.01917808        0.2309365

我正在尝试做类似下面的事情,但无法更进一步。

  df['period'] = np.where(df.period>1, df.period.round(), df.period.round(decimals = 4))

标签: pythonpandas

解决方案


您可以应用 lambda 函数。这个将在四舍五入之前检查它的值是否大于一,否则对于小于一的值四舍五入到小数点后 4 位。我想这就是你想要的?

df['period'] = df['period'].apply(lambda x: round(x, 0) if x > 1 else round(x, 4))

推荐阅读