Python:值转换为列和标志

是否有任何方法可以使用 python 代码将值转换为列名并将它们标记为 1 或 0,如下面的示例所示?


hobbytable 在爱好列中有值,但有些单元格有多个值,用“/”分隔。为了使用多元回归模型或其他模型,数据集的形状会更好,低于预期结果。


共享示例代码以解决此问题将不胜感激。


爱好表(CSV 文件)


personID, hobby

x1234, baseball/soccer

y1234, reading/baseball

z1234, null

a1234, soccer

作为 DataFrame 的预期结果


personID, baseball, soccer, reading, soccer

x1234, 1, 1, 0, 0

y1234, 1, 0, 1, 0

z1234, 0, 0, 0, 0

a1234, 0, 1, 0, 0


慕容708150
浏览 189回答 3
3回答

胡子哥哥

你可以试试这个:import pandas as pddf1 = pd.read_csv(fileName, sep=",")df2 = df1["hobby"].str.get_dummies("/")df = pd.concat([df1, df2], axis = 1)print(df)输出:  personID             hobby  baseball  reading  soccer0    x1234   baseball/soccer         1        0       11    y1234  reading/baseball         1        1       02    z1234               NaN         0        0       03    a1234            soccer         0        0       1

米琪卡哇伊

让我们尝试pandas.get_dummies标记值和groupby索引以减少数据帧。使用列索引连接pandas.concat创建。dummiesoriginal dataframeimport pandas as pddummies = (    pd.get_dummies(df.hoppy.str.split("/").explode())        .groupby(level=0).sum())print(pd.concat([df, dummies], axis = 1))personID             hoppy  baseball  reading  soccer0    x1234   baseball/soccer         1        0       11    y1234  reading/baseball         1        1       02    z1234               NaN         0        0       03    a1234            soccer         0        0       1

猛跑小猪

您可以一行完成:df = df.assign(val=1).pivot_table(values='val', index='personID,', columns='hoppy').fillna(0)解释:.assign()添加一列,这里我们用你稍后在输出表中看到的 1 填充它.pivot_table()现在旋转表 essentialy 为您完成主要工作,如果找不到列的 persionID,它将具有“nan”值.fillna()因此用于用 0 填充此“nan”值
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python