python - 由重叠的低位部分和高位部分组成的组合数

标签 python pandas numpy

我有大约 6-7 位感兴趣的测量数据,但由于它是在“粗糙”环境中记录的,数据记录器非常原始(但稳健)并且只能记录 4 位数字。因此,我将我的测量数据分为低部分和高部分,根据测量的数量,最多三位数可能会重叠,低部分的值优先。

例如以 kW 为单位测量能量流:

P_real = 34.648  # actual value
P_low = 4.648  # low part
P_high = 34.6  # high part

所以在这种情况下,为了获得“真正的”能量流,我需要以某种方式组合数字。由于我有一个非常大的 pandas DataFrame,其形状超过 (1000000, 150),因此必须避免转换为字符串并在正确的位置进行切片。

此外,数据中还包含 NaN。这阻碍了整数转换,因此在“组合”各部分之前还需要屏蔽。

一些示例数据:

ser_hi = pd.Series([34.4, np.nan, np.nan, 35.4, 36.5])
ser_lo = pd.Series([4.648, np.nan, 4.698, 5.498, 6.498])

当前“解决方法”程序的预期输出:

mask_nan = ~(ser_hi.isna() | ser_lo.isna())  # mask for non-nan-values
ser_real = pd.Series(index=ser_hi.index)  # create series for masking the result
# workaround calculation with masking to avoid nan-conversion error
ser_real[mask_nan] = (ser_hi[mask_nan] / 10).astype(int) * 10 + ser_lo[mask_nan]
print(ser_real)
# Out: 0    34.648
       1    NaN
       2    NaN
       3    35.498
       4    36.498
       dtype: float64

是否有任何方法可以通过“删除”指定数字之前/之后的数字来“促进”这种组合?例如,就好像我将两个字符串组合如下:

str_hi = '34.4'
str_lo = '4.648'
str_real = str_hi[:1] + str_lo

当然对于 float 来说,因为字符串的性能很糟糕。 (即使性能还可以,我只是不喜欢将数字数据转换为字符串然后再转换回数字数据。;))

提前感谢您的建议!

最佳答案

不太确定它是否回答了您的问题,但是使用 np.trunc 而不是 astype(int) 应该可以解决 NaN 的问题数据

np.trunc(ser_hi / 10) * 10 + ser_lo 

0    34.648
1       NaN
2       NaN
3    35.498
4    36.498
dtype: float64

关于python - 由重叠的低位部分和高位部分组成的组合数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55633006/

相关文章:

python - 在python中将数组拆分为两个较小的数组

python - Numpy 数组错误设置带有序列的数组元素

python - 使用 Pandas 对调查数据进行扁平化

python - python中列表元素的总和列表,如sql group by

python - 依次计算数据帧中两个非零数之间的零数

python - 通过 'index' (key) 添加元素到 pandas 系列

python - 仅通过 Pandas 数据框中的某些键聚合列?

python - 在否定中调用隐藏方法

python - pandas:查找给定列的百分位数统计信息

python - 将列添加到二维列表