我希望根据类似于pyarrow.Table.take的数据帧的row_id/row_number获得行的子集.例如:给定以下数据帧
from datetime import datetime
df = pl.DataFrame(
{
"integer": [1, 2, 3, 4, 5],
"date": [
datetime(2022, 1, 1),
datetime(2022, 1, 2),
datetime(2022, 1, 3),
datetime(2022, 1, 4),
datetime(2022, 1, 5),
],
"float": [4.0, 5.0, 6.0, 7.0, 8.0],
}
)
print(df)
shape: (5, 3)
┌─────────┬─────────────────────┬───────┐
│ integer ┆ date ┆ float │
│ --- ┆ --- ┆ --- │
│ i64 ┆ datetime[μs] ┆ f64 │
╞═════════╪═════════════════════╪═══════╡
│ 1 ┆ 2022-01-01 00:00:00 ┆ 4.0 │
│ 2 ┆ 2022-01-02 00:00:00 ┆ 5.0 │
│ 3 ┆ 2022-01-03 00:00:00 ┆ 6.0 │
│ 4 ┆ 2022-01-04 00:00:00 ┆ 7.0 │
│ 5 ┆ 2022-01-05 00:00:00 ┆ 8.0 │
└─────────┴─────────────────────┴───────┘
我正在寻找采取像函数df. take([0,4]),它给出了下面的框架.
shape: (2, 3)
┌─────────┬─────────────────────┬───────┐
│ integer ┆ date ┆ float │
│ --- ┆ --- ┆ --- │
│ i64 ┆ datetime[μs] ┆ f64 │
╞═════════╪═════════════════════╪═══════╡
│ 1 ┆ 2022-01-01 00:00:00 ┆ 4.0 │
│ 5 ┆ 2022-01-05 00:00:00 ┆ 8.0 │
└─────────┴─────────────────────┴───────┘
行号是某个其他过程的结果,并被移交.try 使用df.select(pl.all().take([take_indices])
,注意到它比实际直接运行筛选器慢.即df.filter(filter_expr)
.请注意,我正在对非常大的数据集(>;df.select(pl.all().take([take_indices])
M行)执行此操作.
编辑:感谢您的回答.使用DF[[Take_Index]]起作用了.然而,仍然好奇的是,为什么Filter的性能仍然优于selt.ather和方括号方法.对我的具有5000万行的数据集进行计时:
Select .聚集:.5s 正方形_括号:.32s[与莫兹韦的计时一致] 过滤器:.18s