当前位置: 首页 > 知识库问答 >
问题:

将单元格中的多个值转换为列

赵涵亮
2023-03-14

我有一个具有以下结构的数据帧:

First_Name  Last_Name  Group_Membership
Joe         Francis    A
Jane        Davis      B
Mary        Smith      A,B,C
Ian         Brown      A

我需要将单元格Group_Membership中的值转换为列,并得到一个如下所示的数据框:

First_Name  Last_Name  A    B    C
Joe         Francis    Yes  No   No
Jane        Davis      No   Yes  No
Mary        Smith      Yes  Yes  Yes
Ian         Brown      Yes  No   No

我设法将列Group_成员资格中的值转换为列表,然后将其“分解”,但随后我应该以某种方式将其转置

df.['Group_Membership'] = df.['Group_Membership'].str.split(',')
df.explode('Group_Membership')

不知怎的,我现在应该把它转过来了。而且,我不确定这是最好的方法。。。

非常感谢您的帮助!

共有2个答案

柴晔
2023-03-14

另一种方法是也使用get_dummies()。然后将0替换为No1替换为Yes

下面是如何去做这件事。

df1 = df.Group_Membership.str.get_dummies(',').replace({1:'Yes',0:'No'})
df2 = df.join(df1)
print (df2)

这方面的产出将是:

  First_Name Last_Name Group_Membership    A    B    C
0        Joe   Francis                A  Yes   No   No
1       Jane     Davis                B   No  Yes   No
2       Mary     Smith            A,B,C  Yes  Yes  Yes
3        Ian     Brown                A  Yes   No   No

您可以决定稍后删除Group\u Membership列或执行以下操作:

df1 = df.Group_Membership.str.get_dummies(',').replace({1:'Yes',0:'No'})
df2 = df[['First_Name','Last_Name']].join(df1)
print (df2)

或者将所有这些合并到一个语句中,如下所示:

df = df[['First_Name','Last_Name']].join(df.Group_Membership.str.get_dummies(',').replace({1:'Yes',0:'No'}))
print (df)

其输出将为:

  First_Name Last_Name    A    B    C
0        Joe   Francis  Yes   No   No
1       Jane     Davis   No  Yes   No
2       Mary     Smith  Yes  Yes  Yes
3        Ian     Brown  Yes   No   No
慕宏博
2023-03-14

首先创建一个辅助DataFrame(A、B和C列):

df2 = df.Group_Membership.str.split(',').explode().to_frame().assign(val='Yes')\
    .pivot(columns='Group_Membership').droplevel(0, axis=1).fillna('No')

(打印以查看内容)。

然后创建结果:

result = df[['First_Name', 'Last_Name']].join(df2)

结果是:

  First_Name Last_Name    A    B    C
0        Joe   Francis  Yes   No   No
1       Jane     Davis   No  Yes   No
2       Mary     Smith  Yes  Yes  Yes
3        Ian     Brown  Yes   No   No
 类似资料:
  • 我将客户数据转换成DB表,其中Varchar列类型中的几个单元格值包含date,而不包含date。包含特定格式的日期的文件需要转换为另一个文件,以便进一步用于数据分析作业。我尝试了下面的查询,但它显示了没有日期的单元格的错误。我如何解决这个问题? 基本上,我想去掉实际时间,加上000000来代替实际时间和日期。 查询: 错误: 代码:1292截断了不正确的日期时间值:“EVN”

  • 问题内容: 可以说我在PostgreSQL中有一个带有以下各列的表: 我插入了这两行: 我想将上面的行转换为此(在PostgreSQL中进行选择): 调用PHP 并得到这样的东西: 但是现在,如果我用php调用,我会得到: 希望有人能帮助我解决这个问题,谢谢大家 问题答案: 在9.4中很简单(使用了LATERAL join和jsonb函数): 确切结果:

  • 问题内容: 我有一个带有列的详细信息表: user_id int 代码int 值int 我想建立一个汇总表,如下所示: user_id int valueA int valueB int 在详细信息表中,valueA对应于说代码5,而valueB对应于说代码6,所以我正在寻找类似的东西: 插入摘要(user_id,valueA,valueB)VALUES(从详细信息中选择???); 当然,问题是我

  • 我有一个excel表格,有n行6列,我需要将所有这些行插入数据库表。所以我想把每一行的单元格转换成逗号分隔,并用引号列表标记。此外,如果任何单元格为空,则其值应标记为空字符串(“”) 示例:示例图像

  • 如何将该值作为字符串而不是数字从单元格中获取?下面给出了读取和编写excel的代码

  • 问题内容: 我正在尝试制作俄罗斯方块克隆。游戏使用aJTable作为棋盘的表示。电路板是2D整数数组。 我试图做到这一点,当某个单元格具有某个值时,该单元格将变为某种颜色。我以为我可以正常工作,但是无法正常工作。非常感谢您的帮助。 谢谢。 这是我的代码: 板: InitializeJTable: 问题答案: 数据/模型与视图/表之间存在关系。模型维护“什么”,视图控制“如何”。 JTable提供了