首页 > 解决方案 > 我想在 python 中将变量四舍五入到最接近的 1 位小数并计算频率

问题描述

我有以下数据框:

df = [1.2, 0.2, 1.5, 2.49, 2.5, 25.5, 25.49, 14.1, 15.5, 8, 9, 9.6, 5.8, 4.7]

我想计算 df 的四舍五入值。

例如:

=0.5 <=1.49 应该是 1

=1.5 <=2.49 应该是 2

Expected output = [1, 0, 2, 2, 3, 26, 25, 14, 16, 8, 9, 10, 6, 5]

在那之后我怎么能计算频率表?在这种情况下,输出将如下所示:

Bin = [0, 1, 2, 3, 5, 6, 8, 9, 10, 14, 16, 25, 26]

freq = [1,  1,  2,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1]

但我也想填补 bin 值之间的空白。

例如没有频率。可用于 4,7,11,12,13,15,17,18,19,20,21,22,23,24 那么它应该变成 0。

最终输出应该是:

Bin = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20, 21, 22, 23, 24, 25, 26]

freq = [1,  1,  2,  1,  0,  1,  1,  0,  1,  1,  1,  0,  0,  0,  1,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  1,  1]

标签: python-3.x

解决方案


import math 

df = [1.2, 0.2, 1.5, 2.49, 2.5, 25.5, 25.49, 14.1, 15.5, 8, 9, 9.6, 5.8, 4.7]

df = [math.floor(x) if x%1 < .5 else math.ceil(x) for x in df]

freq = {x:0 for x in range(0, max(df)+1)}
for x in df:
    freq[x] += 1

print(freq)

这给出了这个输出:

{0:1、1:1、2:2、3:1、4:0、5:1、6:1、7:0、8:1、9:1、10:1、11:0、12 : 0、13:0、14:1、15:0、16:1、17:0、18:0、19:0、20:0、21:0、22:0、23:0、24:0 , 25:1, 26:1}

如果它绝对必须在列表中,那么

bins = []
counts = []
for k, v in freq.items():
    bins.append(k)
    counts.append(v)

推荐阅读