AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / coding / 问题 / 76969939
Accepted
craigm
craigm
Asked: 2023-08-24 21:45:00 +0800 CST2023-08-24 21:45:00 +0800 CST 2023-08-24 21:45:00 +0800 CST

部分基于其他列名称创建新列

  • 772

总的来说,我对 Polars 和 Python 都很陌生。我有一个有点不寻常的问题,需要一些帮助。我有一个包含 50 多个 0/1 列的数据框。我需要创建一个新列,其中包含每列的逗号分隔列表,其中包含 1 但使用部分列名。如果 hccx = 1,则将 x 附加到字符串列。一个简化的例子:

df=pl.DataFrame(
    {'id':[1,2,3], 'hcc1':[0,1,1],'hcc2':[0,0,1],'hcc5':[0,1,1],'hcc8':[1,0,0]}
)
shape: (3, 5)
┌─────┬──────┬──────┬──────┬──────┐
│ id  ┆ hcc1 ┆ hcc2 ┆ hcc5 ┆ hcc8 │
│ --- ┆ ---  ┆ ---  ┆ ---  ┆ ---  │
│ i64 ┆ i64  ┆ i64  ┆ i64  ┆ i64  │
╞═════╪══════╪══════╪══════╪══════╡
│ 1   ┆ 0    ┆ 0    ┆ 0    ┆ 1    │
│ 2   ┆ 1    ┆ 0    ┆ 1    ┆ 0    │
│ 3   ┆ 1    ┆ 1    ┆ 1    ┆ 0    │
└─────┴──────┴──────┴──────┴──────┘

我想创建一个新列(字符串类型)hccall,如下所示:

ID 呼呼
1 8
2 1,5
3 1,2,5

我想某种类型的列表理解在以“hcc”开头的列上循环会起作用,但我有点卡住了。我可以创建一个循环,但不确定如何从循环内附加到列。有什么巧妙的想法吗?

python-polars
  • 2 2 个回答
  • 46 Views

2 个回答

  • Voted
  1. Best Answer
    Mondo30003
    2023-08-24T22:12:06+08:002023-08-24T22:12:06+08:00

    我认为最简单的选择是首先融化你的数据帧,这样你的数据帧中每列每个 id 一行。然后您可以过滤等于 1 的行。然后您可以将原始行的最后一个字母聚合到一个列表中。使用 list.join 您可以将列表组合成一个以逗号分隔的字符串

    (
        df.melt(id_vars="id")
        .filter(pl.col("value") == 1)
        .groupby("id")
        .agg(pl.col("variable").str.slice(3))
        .with_columns(pl.col("variable").list.join(","))
    )
    
    shape: (3, 2)
    ┌─────┬──────────┐
    │ id  ┆ variable │
    │ --- ┆ ---      │
    │ i64 ┆ str      │
    ╞═════╪══════════╡
    │ 2   ┆ 1,5      │
    │ 3   ┆ 1,2,5    │
    │ 1   ┆ 8        │
    └─────┴──────────┘
    
    • 3
  2. Dean MacGregor
    2023-08-25T02:56:14+08:002023-08-25T02:56:14+08:00

    这是另一种无需熔化或分组的方法

    (
        df
        .with_columns(
            hccall=pl.concat_list(
                        pl.when(pl.col(x)==1)
                        .then(pl.lit(x.replace('hcc',', ')))
                        .otherwise(pl.lit('')) for x in df.columns if x[:3]=='hcc')
                    .list.join("")
                    .str.replace("^, ", "")
                        )
    )
    

    我不知道如何优雅地删除空值,所以最后concat_list变得很复杂。str.replace我认为有一种简洁的方法可以做到这一点,但我暂时没有想到。

    • 2

相关问题

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    使用 <font color="#xxx"> 突出显示 html 中的代码

    • 2 个回答
  • Marko Smith

    为什么在传递 {} 时重载解析更喜欢 std::nullptr_t 而不是类?

    • 1 个回答
  • Marko Smith

    您可以使用花括号初始化列表作为(默认)模板参数吗?

    • 2 个回答
  • Marko Smith

    为什么列表推导式在内部创建一个函数?

    • 1 个回答
  • Marko Smith

    我正在尝试仅使用海龟随机和数学模块来制作吃豆人游戏

    • 1 个回答
  • Marko Smith

    java.lang.NoSuchMethodError: 'void org.openqa.selenium.remote.http.ClientConfig.<init>(java.net.URI, java.time.Duration, java.time.Duratio

    • 3 个回答
  • Marko Smith

    为什么 'char -> int' 是提升,而 'char -> Short' 是转换(但不是提升)?

    • 4 个回答
  • Marko Smith

    为什么库中不调用全局变量的构造函数?

    • 1 个回答
  • Marko Smith

    std::common_reference_with 在元组上的行为不一致。哪个是对的?

    • 1 个回答
  • Marko Smith

    C++17 中 std::byte 只能按位运算?

    • 1 个回答
  • Martin Hope
    fbrereto 为什么在传递 {} 时重载解析更喜欢 std::nullptr_t 而不是类? 2023-12-21 00:31:04 +0800 CST
  • Martin Hope
    比尔盖子 您可以使用花括号初始化列表作为(默认)模板参数吗? 2023-12-17 10:02:06 +0800 CST
  • Martin Hope
    Amir reza Riahi 为什么列表推导式在内部创建一个函数? 2023-11-16 20:53:19 +0800 CST
  • Martin Hope
    Michael A fmt 格式 %H:%M:%S 不带小数 2023-11-11 01:13:05 +0800 CST
  • Martin Hope
    God I Hate Python C++20 的 std::views::filter 未正确过滤视图 2023-08-27 18:40:35 +0800 CST
  • Martin Hope
    LiDa Cute 为什么 'char -> int' 是提升,而 'char -> Short' 是转换(但不是提升)? 2023-08-24 20:46:59 +0800 CST
  • Martin Hope
    jabaa 为什么库中不调用全局变量的构造函数? 2023-08-18 07:15:20 +0800 CST
  • Martin Hope
    Panagiotis Syskakis std::common_reference_with 在元组上的行为不一致。哪个是对的? 2023-08-17 21:24:06 +0800 CST
  • Martin Hope
    Alex Guteniev 为什么编译器在这里错过矢量化? 2023-08-17 18:58:07 +0800 CST
  • Martin Hope
    wimalopaan C++17 中 std::byte 只能按位运算? 2023-08-17 17:13:58 +0800 CST

热门标签

python javascript c++ c# java typescript sql reactjs html

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve