Python:值转换为列和标志

Python:值转换为列和标志,python,Python,是否有任何方法可以使用python代码将值转换为列名,并根据下面的示例将它们标记为1或0 hobbytable在hobby列中有值,但某些单元格有多个以“/”分隔的值。 为了使用多元回归模型或其他模型,数据集的形状将更好,低于预期结果 如能分享示例代码以解决此问题,将不胜感激 hobbytable(CSV文件) 作为数据帧的预期结果 personID, baseball, soccer, reading, soccer x1234, 1, 1, 0, 0 y1234, 1, 0, 1, 0 z1

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

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

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

hobbytable(CSV文件)

作为数据帧的预期结果

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
让我们尝试标记值&
groupby
索引以减少数据帧。沿列索引将创建的
假人
原始数据帧
连接起来

import pandas as pd

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

让我们尝试标记值&
groupby
索引以减少数据帧。沿列索引将创建的
假人
原始数据帧
连接起来

import pandas as pd

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


您可以在一行中完成:

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

解释:

  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
.assign()
添加了一列,这里我们用后面在输出表中看到的1填充它

.pivot\u table()
现在,数据透视表基本上是为您完成主要工作,如果未找到某列的persionID,则它将具有“nan”值


因此,使用
.fillna()
将此“nan”值填充为0

您可以在一行中完成此操作:

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

解释:

  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
.assign()
添加了一列,这里我们用后面在输出表中看到的1填充它

.pivot\u table()
现在,数据透视表基本上是为您完成主要工作,如果未找到某列的persionID,则它将具有“nan”值

因此,使用
.fillna()
将此“nan”值填充为0

您可以尝试以下操作:

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
您可以尝试以下方法:

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

请问你用什么代码来解决这个问题?你能分享你的代码吗?你试过用什么代码来解决这个问题?你能分享你的代码吗?很好,我总是很惊讶有多少方法可以解决一项任务。嗨,苏珊特!谢谢你的帮助!让我试试我的代码,看看它是如何工作的。很好,我总是很惊讶有多少方法可以解决一个任务。嗨,苏珊特!谢谢你的帮助!让我试试我的代码,看看它是如何工作的。谢谢你苏门德拉!我会检查我的实际数据。谢谢你苏门德拉!我会检查我的实际数据。嗨,安德烈亚斯,谢谢你的快速回答。我会申请的。嗨,安德烈亚斯,谢谢你的快速回答。我将应用它。