Pandas:将逗号分隔的列转换为多列

发布于 2025-01-16 11:17:30 字数 796 浏览 0 评论 0原文

我有以下 Pandas DataFrame:

import pandas as pd
import numpy as np

df = pd.DataFrame({'id': [1, 2, 3, 4], 'type': ['a,b,c,d', 'b,d', 'c,e', np.nan]})

在此处输入图像描述

我需要根据逗号分隔符拆分类型列,并将值转换为多个列以获得此

在此处输入图像描述

我查看了Pandas 文档中的pivot() 并搜索了stackoverflow。我没有找到任何似乎可以(直接或间接)实现我在这里需要做的事情。有什么建议吗?

编辑:

enke 的解决方案使用 Pandas 1.3.5 工作。但是,它无法使用最新版本 1.4.1。这是屏幕截图:

在此处输入图像描述

I have the following Pandas DataFrame:

import pandas as pd
import numpy as np

df = pd.DataFrame({'id': [1, 2, 3, 4], 'type': ['a,b,c,d', 'b,d', 'c,e', np.nan]})

enter image description here

I need to split the type column based on the commma delimiter and pivot the values into multiple columns to get this

enter image description here

I looked at Pandas documentation for pivot() and also searched stackoverflow. I did not find anything that seems to achieve (directly or indirectly) what I need to do here. Any suggestions?

Edited:

enke's solution works using Pandas 1.3.5. However it does not work using the latest version 1.4.1. Here is the screenshot:

enter image description here

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

﹂绝世的画 2025-01-23 11:17:30

您可以使用 str.get_dummies 来获取虚拟变量;然后join回到df

out = df[['id']].join(df['type'].str.get_dummies(sep=',').add_prefix('type_').replace(0, float('nan')))

输出:

   id  type_a  type_b  type_c  type_d  type_e
0   1     1.0     1.0     1.0     1.0     NaN
1   2     NaN     1.0     NaN     1.0     NaN
2   3     NaN     NaN     1.0     NaN     1.0
3   4     NaN     NaN     NaN     NaN     NaN

You could use str.get_dummies to get the dummy variables; then join back to df:

out = df[['id']].join(df['type'].str.get_dummies(sep=',').add_prefix('type_').replace(0, float('nan')))

Output:

   id  type_a  type_b  type_c  type_d  type_e
0   1     1.0     1.0     1.0     1.0     NaN
1   2     NaN     1.0     NaN     1.0     NaN
2   3     NaN     NaN     1.0     NaN     1.0
3   4     NaN     NaN     NaN     NaN     NaN
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文