代码之家  ›  专栏  ›  技术社区  ›  levant pied

Polar某些列的总数,而不单独列出每列

  •  0
  • levant pied  · 技术社区  · 10 月前

    假设我有这个数据帧:

    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 两个帧,以获得一个具有totals行的数据帧。

    有两个潜在的用例规定了“特定列”的含义:

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

    有没有一种方法可以做到这一点,而不单独列出每一列?

    1 回复  |  直到 10 月前
        1
  •  1
  •   jqurious FObersteiner    10 月前

    一种选择是使用 diagonal concat strategy 相反

    斜线的 :查找列架构之间的并集,并用null填充缺失的列值

    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 │
    └─────┴───────┴──────┴──────┘