python-3.x - 我想在 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]
解决方案
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)
推荐阅读
- python - 根据列找出数据框中的缺失值
- bootstrap-4 - 手动安装 Bootstrap4
- oracle - 如何计算 ORACLE 中 2 列之和的平均值?
- python - 从嵌套为python中字典值的两个列表中检索数据的最有效方法
- python - Bokeh 可以检测屏幕尺寸并重塑移动设备的布局吗?
- c++ - 交换两个对象的两个属性的值
- python - txt 与 dict 的 str 成 dict
- amazon-cloudwatch - CloudWatch Log Insights 中的多方面时间序列可视化
- compiler-construction - 转译/代码生成 - 变量声明问题
- javafx - 尝试使用 FXML 文件进行编译时,JavaFX 程序不起作用