我想用类别的出现频率替换类别.我的收件箱很懒惰,目前如果没有对整个数据进行2次传递,然后对一列进行一次传递以获取收件箱的长度,我就无法做到这一点.以下是我的做法:

输入:

df = pl.DataFrame({"a": [1, 8, 3], "b": [4, 5, None], "c": ["foo", "bar", "bar"]}).lazy()
print(df.collect())
output:
shape: (3, 3)
┌─────┬──────┬─────┐
│ a   ┆ b    ┆ c   │
│ --- ┆ ---  ┆ --- │
│ i64 ┆ i64  ┆ str │
╞═════╪══════╪═════╡
│ 1   ┆ 4    ┆ foo │
│ 8   ┆ 5    ┆ bar │
│ 3   ┆ null ┆ bar │
└─────┴──────┴─────┘

所需输出:

shape: (3, 3)
┌─────┬──────┬────────────────────┐
│ a   ┆ b    ┆ c                  │
│ --- ┆ ---  ┆ ---                │
│ i64 ┆ i64  ┆ str                │
╞═════╪══════╪════════════════════╡
│ 1   ┆ 4    ┆ 0.3333333333333333 │
│ 8   ┆ 5    ┆ 0.6666666666666666 │
│ 3   ┆ null ┆ 0.6666666666666666 │
└─────┴──────┴────────────────────┘

转换代码:

l = df.select("c").collect().shape[0]
rep = df.group_by("c").len().collect().with_columns(pl.col("len")/l).lazy()
df_out = df.with_context(rep.select(pl.all().name.prefix("context_"))).with_columns(pl.col("c").replace(pl.col("context_c"), pl.col("context_len"))).collect()
print(df_out)
output:
shape: (3, 3)
┌─────┬──────┬────────────────────┐
│ a   ┆ b    ┆ c                  │
│ --- ┆ ---  ┆ ---                │
│ i64 ┆ i64  ┆ str                │
╞═════╪══════╪════════════════════╡
│ 1   ┆ 4    ┆ 0.3333333333333333 │
│ 8   ┆ 5    ┆ 0.6666666666666666 │
│ 3   ┆ null ┆ 0.6666666666666666 │
└─────┴──────┴────────────────────┘

如您所见,我收集了2次完整的数据,并且在一列上进行了一次收集.我能做得更好吗?

推荐答案

pl.len()将判断为"column length".

您还可以在组上下文(agg/over)中使用它作为计算值的一种方式.

df.with_columns(pl.len().over("c") / pl.len()).collect()
shape: (3, 3)
┌─────┬──────┬──────────┐
│ a   ┆ b    ┆ c        │
│ --- ┆ ---  ┆ ---      │
│ i64 ┆ i64  ┆ f64      │
╞═════╪══════╪══════════╡
│ 1   ┆ 4    ┆ 0.333333 │
│ 8   ┆ 5    ┆ 0.666667 │
│ 3   ┆ null ┆ 0.666667 │
└─────┴──────┴──────────┘

通过按值分组,其"frequency count"就是组长度.

>>> df.group_by("c").len()
shape: (2, 2)
┌─────┬─────┐
│ c   ┆ len │
│ --- ┆ --- │
│ cat ┆ u32 │
╞═════╪═════╡
│ foo ┆ 1   │
│ bar ┆ 2   │
└─────┴─────┘

Python相关问答推荐

如何修复fpdf中的线路出血

Docker-compose:为不同项目创建相同的容器

customtkinter中使用的这个小部件的名称是什么

"如果发生特定错误,返回值

用Python获取HTML Span类中的数据

创建带有二维码的Flask应用程序,可重定向到特定端点

symy.分段使用numpy数组

Polars:使用列值引用when / then表达中的其他列

如何处理嵌套的SON?

根据给定日期的状态过滤查询集

类型错误:输入类型不支持ufuncisnan-在执行Mann-Whitney U测试时[SOLVED]

更改键盘按钮进入'

如何使用数组的最小条目拆分数组

将pandas Dataframe转换为3D numpy矩阵

无法定位元素错误404

运输问题分支定界法&

用砂箱开发Web统计分析

AES—256—CBC加密在Python和PHP中返回不同的结果,HELPPP

pandas:对多级列框架的列进行排序/重新排序

合并与拼接并举