如何在 python 极坐标中分组时忽略 EMPTY/NULL 值列?

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

我有一个数据框。

df_X = pl.DataFrame({'last_name':['James','Warner','Marino','James','Warner','Marino','James'],
             'first_name':['Horn','Bro','Kach','Horn','Bro','Kach','Horn'],
             'dob':['03/06/1990','09/16/1990','03/06/1990','','03/06/1990','','']}
            )

enter image description here

我对最后一个、第一个和 dob 列应用分组以获得计数

df_X.groupby(['last_name','first_name','dob']).agg(pl.count())

enter image description here

在这里我想忽略分组列上的 NULL/EMPTY 值

James Horn 有两个空 DOB,这些不应包含在分组操作中。

这是预期的输出。

enter image description here

当然,我们可以在进行分组之前对列进行过滤,如下所示

df_X.filter(pl.col('dob')!="").groupby(['last_name','first_name','dob']).agg(pl.count())

但是如果我在过滤操作中要指定 10 列怎么办?我需要一个接一个地写它们。

还有其他解决办法吗?

python python-polars
1个回答
3
投票

首先用

null
值替换空字符串,然后使用 drop_nulls

(
    df_X
    .with_columns(
        pl.when(pl.col(group_columns).str.len_chars() == 0)
        .then(None)
        .othrwise(pl.col(group_columns))
        .name.keep()
    )
    .drop_nulls(group_columns)
    .group_by(group_columns)
    .len()
)
shape: (4, 4)
┌───────────┬────────────┬────────────┬───────┐
│ last_name ┆ first_name ┆ dob        ┆ len   │
│ ---       ┆ ---        ┆ ---        ┆ ---   │
│ str       ┆ str        ┆ str        ┆ u32   │
╞═══════════╪════════════╪════════════╪═══════╡
│ Warner    ┆ Bro        ┆ 09/16/1990 ┆ 1     │
│ Marino    ┆ Kach       ┆ 03/06/1990 ┆ 1     │
│ Warner    ┆ Bro        ┆ 03/06/1990 ┆ 1     │
│ James     ┆ Horn       ┆ 03/06/1990 ┆ 1     │
└───────────┴────────────┴────────────┴───────┘
© www.soinside.com 2019 - 2024. All rights reserved.