【问题标题】:Round floats in a dataframe to nearest specific float values (rounding to a non integer list)将数据框中的浮点数舍入到最接近的特定浮点值(舍入到非整数列表)
【发布时间】:2021-01-31 10:51:45
【问题描述】:

我有一个像这样的数据框:

dict_ = {'Col1':[0.54523, 0.24223, 0.94234],'Col2':[0.992324, 0.274336, 0.245435]}
df = pd.DataFrame(dict_, columns=dict_.keys())
Col1 Col2
0.54523 0.992324
0.24223 0.274336
0.94234 0.245435

我只想拥有特定值 0.25, 0.5, 1.0,将原始 df 数据框四舍五入到特定值上最接近的可能数字。

所以,我希望df 变成:

Col1 Col2
0.5 1.0
0.25 0.25
1.0 0.25

如何在 python 中执行此操作(最好在 pandas 数据框中)?

【问题讨论】:

  • "round-to-nearest-quarter" 这相当于乘以 4,四舍五入,然后除以 4。
  • 0.00.75 不在列表中,但如果是均匀分布,我明白你的意思。在这种情况下,这将是最好的方法。
  • 哦,非均匀量化箱,我没有注意到。但是您仍然可以通过乘以 4、量化然后除以 4 来处理它。

标签: python pandas dataframe rounding


【解决方案1】:

让我们使用 numpy 广播来计算 Col1Col2 中每个值与数组 [0.25, 0.5, 1.0] 中的值之间的绝对差,然后使用 .argmin 找到最接近值的索引:

c = ['Col1', 'Col2']

a = np.array([0.25, 0.5, 1.0])
idx = np.abs(df[c].values[:, :, None] - a).argmin(axis=-1)
df[c] = a[idx]

结果:

   Col1  Col2
0  0.50  1.00
1  0.25  0.25
2  1.00  0.25

【讨论】:

    【解决方案2】:

    方法1:

    如果值固定为 [0.25, 0.5, 1.0],则使用:

    np.round(df/0.125, 0) * 0.125
    

    方法2:

    1. 使用pd.cut 作为bins 添加列表[0, 0.25, 0.5, 1.0] 中每个元素的平均值,所以bins[0, 0.125, 0.25, 0.375, 0.5, 0.75, 1.0]
    2. lable 设置为[0, 0.25, 0.25, 0.5, 0.5, 1.0]
    bins = [0, 0.25, 0.5, 1.0]
    labels = sorted(bins + bins)[1:-1]
    print(labels) # [0, 0.25, 0.25, 0.5, 0.5, 1.0]
    
    obj = pd.Series(bins)
    bins += ((obj + obj.shift(1))/2) .dropna().tolist()
    bins.sort()
    print(bins) # [0, 0.125, 0.25, 0.375, 0.5, 0.75, 1.0]
    
    dfn = pd.DataFrame()
    for col in df.columns:
        dfn[col] = pd.cut(df[col], bins=bins, 
                          labels=labels, 
                          ordered=False)
    
    print(dfn)
    
           Col1  Col2
        0  0.50  1.00
        1  0.25  0.25
        2  1.00  0.25
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-09-27
      • 2013-06-13
      • 1970-01-01
      • 2018-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多