假设我有这个相框:

df = polars.DataFrame(dict(
  j=[2, 7, 1, 8],
  k=[False, True, True, False],
  l=['foo', 'bar', 'quux', 'bin'],
  u=[5.0, 8.0, 13.0, 21.0],
  ))
print(df)

 j (i64)  k (bool)  l (str)  u (f64)
 2        false     foo      5.0
 7        true      bar      8.0
 1        true      quux     13.0
 8        false     bin      21.0
shape: (4, 4)

我只能对某些列进行行和,并将其他列设置为None:

dfj = (df
  .select(
    polars.col('j').sum(),
    polars.lit(None).alias('k'),
    polars.lit(None).alias('l'),
    polars.col('u').sum(),
    )
  )
print(dfj)

 j (i64)  k (null)  l (null)  u (f64)
 18       null      null      47.0
shape: (1, 4)

我想保持列顺序,这样我就可以对两个帧进行polars.concat次,以获得具有总数行的一个跨帧.

有两个潜在的用例规定了"某列"的含义:

  • 具有某些类型的列
  • 具有特定名称的列

有没有一种方法可以在不单独列出每列的情况下做到这一点?

推荐答案

一种 Select 是使用diagonal concat strategy.

diagonal:查找列架构之间的联合并用空填充缺失的列值

pl.concat(
   [
      df,
      df.select("j", "u").sum()
   ],
   how = "diagonal"
)
shape: (5, 4)
┌─────┬───────┬──────┬──────┐
│ j   ┆ k     ┆ l    ┆ u    │
│ --- ┆ ---   ┆ ---  ┆ ---  │
│ i64 ┆ bool  ┆ str  ┆ f64  │
╞═════╪═══════╪══════╪══════╡
│ 2   ┆ false ┆ foo  ┆ 5.0  │
│ 7   ┆ true  ┆ bar  ┆ 8.0  │
│ 1   ┆ true  ┆ quux ┆ 13.0 │
│ 8   ┆ false ┆ bin  ┆ 21.0 │
│ 18  ┆ null  ┆ null ┆ 47.0 │
└─────┴───────┴──────┴──────┘

好像没有concat也能做的事情

使用第二个.select()来重新排序列有点尴尬,但也许可以改进:

(df.select(
   pl.col("j", "u").append(pl.col("j", "u").sum()),
   pl.exclude("j", "u").append(None)
 )
 .select(df.columns) # reorder columns
)
shape: (5, 4)
┌─────┬───────┬──────┬──────┐
│ j   ┆ k     ┆ l    ┆ u    │
│ --- ┆ ---   ┆ ---  ┆ ---  │
│ i64 ┆ bool  ┆ str  ┆ f64  │
╞═════╪═══════╪══════╪══════╡
│ 2   ┆ false ┆ foo  ┆ 5.0  │
│ 7   ┆ true  ┆ bar  ┆ 8.0  │
│ 1   ┆ true  ┆ quux ┆ 13.0 │
│ 8   ┆ false ┆ bin  ┆ 21.0 │
│ 18  ┆ null  ┆ null ┆ 47.0 │
└─────┴───────┴──────┴──────┘

Python相关问答推荐

使用from_pandas将GeDataFrame转换为polars失败,ArrowType错误:未传递numpy. dype对象

如何用symy更新分段函数

多处理代码在while循环中不工作

Pandas 滚动最接近的价值

如何使用html从excel中提取条件格式规则列表?

在Python Attrs包中,如何在field_Transformer函数中添加字段?

Pandas - groupby字符串字段并按时间范围 Select

我们可以为Flask模型中的id字段主键设置默认uuid吗

如何在WSL2中更新Python到最新版本(3.12.2)?

在极性中创建条件累积和

Scrapy和Great Expectations(great_expectations)—不合作

不允许访问非IPM文件夹

如何使用Numpy. stracards重新编写滚动和?

dask无groupby(ddf. agg([min,max])?''''

Python Tkinter为特定样式调整所有ttkbootstrap或ttk Button填充的大小,适用于所有主题

Maya Python脚本将纹理应用于所有对象,而不是选定对象

如何在两列上groupBy,并使用pyspark计算每个分组列的平均总价值

Flask运行时无法在Python中打印到控制台

如果不使用. to_list()[0],我如何从一个pandas DataFrame中获取一个值?

将像素信息写入文件并读取该文件