为什么极坐标滚动校正会同时产生 null 和 NaN,而不是其中之一?

问题描述 投票:0回答:1

更新: 在这种情况下,Polars 不再产生 null。该示例现在返回 2 个 NaN 值。


import polars as pl

ts_count_df = pl.DataFrame([pl.Series("ts", [
    1687743109438,
    1687831935720,
    1687958569223,
    1687978376064,
    1688095371395,
    1688213575425,
    1688262561054,
    1688281964195,
    1688362014828,
    1688442925287
]), pl.Series("count", [
    0,
    0,
    19301,
    67,
    0,
    3009,
    1871,
    0,
    95,
    12,
])]).with_columns(
    pl.from_epoch("ts", time_unit="ms")
).sort("ts")

with_corr = ts_count_df.rolling(index_column="ts", period="3d").agg(
    pl.corr("count",
            "count").alias("corr"),
    pl.mean("count").alias("avg"))

print(with_corr.head())

输出:

┌─────────────────────────┬────────────────────┬────────────────────┐
│ ts                      ┆ corr               ┆ avg                │
│ ---                     ┆ ---                ┆ ---                │
│ datetime[ms]            ┆ f64                ┆ f64                │
╞═════════════════════════╪════════════════════╪════════════════════╡
│ 2023-06-26 01:31:49.438 ┆ null               ┆ 0                  │
│ 2023-06-27 02:12:15.720 ┆ NaN                ┆ 0                  │
│ 2023-06-28 13:22:49.223 ┆ 1.0000000000000002 ┆ 6433.666666666667  │
│ 2023-06-28 18:52:56.064 ┆ 1.0000000000000002 ┆ 4842               │
│ 2023-06-30 03:22:51.395 ┆ 1                  ┆ 6456               │
│ 2023-07-01 12:12:55.425 ┆ 1.0000000000000002 ┆ 5594.25            │
│ 2023-07-02 01:49:21.054 ┆ 1                  ┆ 1626.6666666666667 │
│ 2023-07-02 07:12:44.195 ┆ 1                  ┆ 1220               │
│ 2023-07-03 05:26:54.828 ┆ 1                  ┆ 1243.75            │
│ 2023-07-04 03:55:25.287 ┆ 1                  ┆ 997.4              │
└─────────────────────────┴────────────────────┴────────────────────┘

为什么 corr 的前两个值是

null
NaN
?我预计前两天都是
NaN
或两者都是
null
,而不是各有一个

python correlation python-polars
1个回答
1
投票

因为这些值无法计算,因为前两天“count”列中没有数据。滚动聚合过程根据特定时间段内的数据进行统计。对于前两天,这段时间(3天)没有足够的数据,因此无法计算相关性(“corr”)。

到前两天结束时,已经收集了更多数据,因此可以进行相关性计算。因此,从第三天开始可以计算并显示相关值(“corr”)。

因此,前两天显示“null”和“NaN”值是预期行为,因为无法计算这些天的相关性。

© www.soinside.com 2019 - 2024. All rights reserved.