Python:值转换为列和标志

2024-10-04 01:31:58 发布

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

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

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

如能分享示例代码以解决此问题,将不胜感激

hobbytable(CSV文件)

personID, hobby
x1234, baseball/soccer
y1234, reading/baseball
z1234, null
a1234, soccer

作为数据帧的预期结果

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

Tags: 数据方法代码模型示例readingbaseballsoccer
3条回答

让我们尝试^{}标记值&groupby索引以减少数据帧^{}沿列索引将创建的dummiesoriginal dataframe连接起来

import pandas as pd

dummies = (
    pd.get_dummies(df.hoppy.str.split("/").explode())
        .groupby(level=0).sum()
)
print(pd.concat([df, dummies], axis = 1))

personID             hoppy  baseball  reading  soccer
0    x1234   baseball/soccer         1        0       1
1    y1234  reading/baseball         1        1       0
2    z1234               NaN         0        0       0
3    a1234            soccer         0        0       1

您可以尝试以下方法:

import pandas as pd

df1 = pd.read_csv(fileName, sep=",")
df2 = df1["hobby"].str.get_dummies("/")
df = pd.concat([df1, df2], axis = 1)
print(df)

输出:

  personID             hobby  baseball  reading  soccer
0    x1234   baseball/soccer         1        0       1
1    y1234  reading/baseball         1        1       0
2    z1234               NaN         0        0       0
3    a1234            soccer         0        0       1

您可以在一行中完成:

df = df.assign(val=1).pivot_table(values='val', index='personID,', columns='hoppy').fillna(0)

解释:

.assign()添加一列,这里我们用后面在输出表中看到的1填充它

.pivot_table()现在数据透视表基本上为您完成了主要工作,如果没有为某列找到persionID,它将有一个“nan”值

因此.fillna()用于用0填充此“nan”值

相关问题 更多 >