如何使用Pandas积分计算功率值以上产生的能量?

2024-04-26 05:23:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我有什么?

我的dfpd.DataFrame'power'列和'timestamp'列。 我还有一个功率值,称为“x\u功率”

我想要什么?

我试图找出在'x_power'上方和下方产生的能量(例如x_power=900), 为此,我想做一个积分:

enter image description here

y轴功率

x轴-时间戳

粉红色区域-超过x_功率产生的能量

绿色区域-低于x_功率产生的能量

from scipy.interpolate import InterpolatedUnivariateSpline

x = df['timestamp'].to_numpy()
y = df['power'].to_numpy()
max = np.max(x)
min = np.min(x)

f = InterpolatedUnivariateSpline(x, y, k=1)  # k=1 gives linear interpolation

f.integral(min , max)

输出是图形下方的区域

有一种简单的方法可以在没有多重积分的情况下计算上下“x_幂”


Tags: tonumpy区域dataframedfnpmin功率
1条回答
网友
1楼 · 发布于 2024-04-26 05:23:50

要在x\u power上集成绘图区域,您需要 “向下移动”您的y值,使“新建0” 处于x_功率水平

然后应该将负值剪裁为零

但是因为您只选择了整个绘图的点, 第一步应该是生成插值的版本 您的电力生产线,例如,步骤1,然后 执行上述2个步骤

执行此操作的代码是:

intStep = 1    # Interpolation step
# Interpolated x and y
xInt = np.arange(min, max + 1, intStep)
yInt = (np.interp(xInt, x, y) - x_power).clip(min=0)

要查看此行,您可以运行:

fig, ax = plt.subplots()
ax.grid(True)
plt.plot(xInt, yInt)
plt.show()

要集成此函数,请在上述源数据上运行代码:

f = InterpolatedUnivariateSpline(xInt, yInt, k=1)
result = f.integral(min, max)

相关问题 更多 >