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

2024-06-06 22:58:53 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

我需要将单元格组_成员身份中的值转换为列,并获得如下所示的数据帧:

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')

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

非常感谢您的帮助


Tags: 数据nonamedfgroupyesmembershipfirst
2条回答

首先创建一个辅助数据帧(ABC列):

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

另一种方法是使用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_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

相关问题 更多 >