将单元格中的多个值转换为列
将单元格中的多个值转换为列
我有一个具有以下结构的数据框:
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 是 否 否 Jane Davis 否 是 否 Mary Smith 是 是 是 Ian Brown 是 否 否
我设法将列Group_Membership中的值转换为列表,然后对其进行“展开”,但然后我应该以某种方式进行转置
df.['Group_Membership'] = df.['Group_Membership'].str.split(',') df.explode('Group_Membership')
现在我应该进行透视。而且,我不确定这是否是最佳方法...
非常感谢您的帮助!
问题的原因:在给定的数据中,有一个名为"Group_Membership"的列,其中的值是用逗号分隔的多个值。需要将这些多个值转换成列,并替换为"Yes"和"No"。
解决方法:可以使用pandas库中的get_dummies()函数来实现。首先使用get_dummies()函数将"Group_Membership"列的多个值转换成列,并将1替换为"Yes",0替换为"No"。然后将转换后的列与原数据框连接起来,得到转换后的数据框。
以下是具体的解决方法:
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
通过以上的方法,我们成功地将"Group_Membership"列的多个值转换成了单独的列,并将其替换为"Yes"和"No"。这样可以更方便地进行数据分析和处理。
多个值在一个单元格中的情况是指在一个单元格中存在多个值,这在数据处理中经常遇到。本文讨论了如何将多个值从单元格中拆分成多列,并给出了解决方法。
在给出解决方法之前,首先创建一个辅助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')
我们可以打印这个辅助DataFrame来查看其内容。
然后,我们创建最终的结果。我们选取原始DataFrame中的'First_Name'和'Last_Name'列,并将辅助DataFrame与其合并,具体操作如下:
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
通过上述操作,我们成功将原始DataFrame中的多个值拆分到了新的列中,从而实现了将多个值在单元格中转化为列的目的。