小编eli*_*A92的帖子

如何在Python中的一个常规Pandas DataFrame中加入许多零散的时间序列

我必须使用从某些CSV导入的时间序列数据,如下所示:

import pandas as pd

csv_a = [["Sensor_1", '2019-05-25 10:00', 25, 60],
         ["Sensor_2", '2019-05-25 10:00', 30, 45],
         ["Sensor_1", '2019-05-25 10:05', 26, None],
         ["Sensor_2", '2019-05-25 10:05', 30, 46],
         ["Sensor_1", '2019-05-25 10:10', 27, 63],
         ["Sensor_1", '2019-05-25 10:20', 28, 62]]

df_a = pd.DataFrame(csv_a, columns=["Sensor", "Timestamp", "Temperature", "Humidity"])
df_a["Timestamp"] = (pd.to_datetime(df_a["Timestamp"]))

csv_b = [["Sensor_1", '2019-05-25 10:05', 1020],
         ["Sensor_2", '2019-05-25 10:05', 956],
         ["Sensor_3", '2019-05-25 10:05', 990],
         ["Sensor_1", '2019-05-25 10:10', 1021],
         ["Sensor_2", '2019-05-25 10:10', 957],
         ["Sensor_3", '2019-05-25 10:10', 992],
         ["Sensor_1", '2019-05-25 10:15', 1019]]

df_b = pd.DataFrame(csv_b, …
Run Code Online (Sandbox Code Playgroud)

python time-series dataframe pandas

6
推荐指数
1
解决办法
89
查看次数

Plotly:当使用选项 line_shape='spline' 时,我们绘制什么样的样条?

我正在准备一些代码来用样条插入一系列点。

样条有很多种:二次的,三次的,很多边界条件……

到目前为止,我已经尝试了最流行的:三次样条,边界条件:

  • 自然:二阶导数在第一点和最后点为零。
  • 钳位:一阶导数在第一个点和最后一个点处为零。
  • Not-a-knot:三阶导数在第二个和倒数第二个点是连续的。

我还尝试了具有“夹紧”初始条件的二次样条。

我发现当我们像这样定义跟踪时,Plotly 也有一个内置的插值函数:

fig.add_trace(go.Scatter(
    x=df['timestamp'],
    y=df['values'],
    mode='lines',
    line_shape='spline',
))
Run Code Online (Sandbox Code Playgroud)

这个情节的样条线看起来很合我的口味。例如,它比自然三次样条更柔软且振荡更小:

红线是自然三次样条。灰线是 plotly 的样条。

在此处输入图片说明

所以我的问题是:这是什么类型的样条?

我试图将它与我上面提到的曲线进行比较。它们都不像 Plotly 的样条。

我检查了 Plotly 的文档,它没有告诉你他们使用的是哪种曲线。但是它说您可以添加参数“平滑”以控制曲率。

有谁知道 Plotly 的人是怎么做的?

python r spline plotly

5
推荐指数
1
解决办法
735
查看次数

迭代构建 Pandas DataFrame 的最佳方法

假设我有一个正在循环的算法。它将返回未知数量的结果,我想将它们全部存储在 DataFrame 中。例如:

df_results = pd.DataFrame(columns=['x', 'x_squared'])

x = 0
x_squared = 1

while x_squared < 100:
    x_squared = x ** 2

    df_iteration = pd.DataFrame(data=[[x,x_squared]], columns=['x', 'x_squared'])
    df_results = df_results.append(df_iteration, ignore_index=True)

    x += 1

print(df_results)
Run Code Online (Sandbox Code Playgroud)

输出:

     x  x_squared
0    0          0
1    1          1
2    2          4
3    3          9
4    4         16
5    5         25
6    6         36
7    7         49
8    8         64
9    9         81
10  10        100
Run Code Online (Sandbox Code Playgroud)

问题是当我想要进行大量迭代时。数学运算本身非常快。然而,当我们进行大循环时,数据帧的创建和附加变得非常慢。

我知道这个特定的例子可以很容易地解决,而无需在每次迭代中使用数据帧。但是想象一个复杂的算法,它还对数据帧等执行操作。对我来说,有时一步一步构建结果数据帧会更容易。哪种方法是最好的?

python dataframe pandas

3
推荐指数
1
解决办法
1013
查看次数

标签 统计

python ×3

dataframe ×2

pandas ×2

plotly ×1

r ×1

spline ×1

time-series ×1