使用 lambda 函数有条件地将大型极坐标数据框中的所有值替换为特定字符串

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

如何将大型多列极坐标数据矩阵中大于 9999 的所有整数值替换为字符串“10K+”?

我尝试了 df.map、df.apply 和 df.applymap:

labels = df.map(lambda v: '10K+' if v > 10000 else v) AttributeError:“DataFrame”对象没有属性“map”。您的意思是:“最大”吗?

labels = df.apply(lambda v: '10K+' if v > 10000 else v) 类型错误:“tuple”和“int”实例之间不支持“>”

labels = df.applymap(lambda v: '10K+' if v > 10000 else v) AttributeError:“DataFrame”对象没有属性“applymap”

dataframe lambda python-polars inplace-editing
1个回答
0
投票

使用

when
-
then
表达式。

>>> df = pl.DataFrame({
...     'Col1': [2, 74, 37, 36, 95],
...     'Col2': [36, 80, 9, 26, 16],
... })
>>> df.with_columns([
...     pl.when(pl.col(i) > 10).then(pl.lit('10+'))
...     .otherwise(pl.col(i).cast(pl.String)).alias(i) 
...     for i in df.columns
... ])
shape: (5, 2)
┌──────┬──────┐
│ Col1 ┆ Col2 │
│ ---  ┆ ---  │
│ str  ┆ str  │
╞══════╪══════╡
│ 2    ┆ 10+  │
│ 10+  ┆ 10+  │
│ 10+  ┆ 9    │
│ 10+  ┆ 10+  │
│ 10+  ┆ 10+  │
└──────┴──────┘

在此示例中,只需更改硬编码的

10
10+
即可。您不能使用
then('10+')
,因为它将其解释为列引用。为此,您需要用
pl.lit
将其包裹起来。

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