如何在Polars中基于字典映射分隔字符串列的值来创建新列
如何在Polars中基于字典映射分隔字符串列的值来创建新列
Sorry if the title is confusing.
我对Pandas挺熟悉的,本来打算用暴力迭代和基于索引的赋值来生成新列,但最近了解到Polars,想试试它的并行化/速度优势,同时也想更新自己的数据技能。这是我第一次用Polars,结果不太顺利。
我有一个DataFrame,其中一列是用逗号分隔的标签字符串,每个单元格都是相关食物的列表。我想要逐行扫描这些内容,根据现有食物对应的通用类别,添加对应的新列——如果该行包含某个具体食物,就在对应的类别列标记X或者True之类的标识。
举个例子,我的DataFrame长这样:
import polars as pl my_df = pl.from_repr(""" ┌───────┬────────┬──────────────────┐ │ Index ┆ Person ┆ Food Provided │ │ --- ┆ --- ┆ --- │ │ i64 ┆ str ┆ str │ ╞═══════╪════════╪══════════════════╡ │ 1 ┆ Billy ┆ Apple, Hot dog │ │ 2 ┆ Suzy ┆ Celery, brownies │ └───────┴────────┴──────────────────┘ """)
我还有一个用于映射具体食物到通用类别的字典:
foodTypes_dict = { 'Apple': 'Fruit', 'Hot dog': 'Meat', 'Celery': 'Vegetable', 'brownies': 'Dessert' }
我想要生成的最终结果大概是这样的:
| Index | Person | Food Provided | Fruit | Vegetable | Meat | Dessert |
|---|---|---|---|---|---|---|
| 1 | Billy | Apple, Hot dog | X | None | X | None |
| 2 | Suzy | Celery, brownies | None | X | None | X |
我试过这段代码:
for key in foodTypes_dict.keys(): my_df.with_columns((pl.col("Food Provided").str.contains(key)).alias(foodTypes_dict[key]))
这段代码终于没有语法错误了,但根本不起作用——它完全没有创建任何新列。我在循环里加了my_df.glimpse()查看,DataFrame的维度根本没变化。也没有报错,在Jupyter Notebook里运行完瞬间结束,但完全不是预期的输出。
希望有人能帮忙指点一下,谢谢!
备注:内容来源于stack exchange,提问作者Sparky Parky
相关产品推荐
相关产品推荐

