Python:值转换为列和标志
是否有任何方法可以使用python代码将值转换为列名,并根据下面的示例将它们标记为1或0 hobbytable在hobby列中有值,但某些单元格有多个以“/”分隔的值。 为了使用多元回归模型或其他模型,数据集的形状将更好,低于预期结果 如能分享示例代码以解决此问题,将不胜感激 hobbytable(CSV文件) 作为数据帧的预期结果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
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
请问你用什么代码来解决这个问题?你能分享你的代码吗?你试过用什么代码来解决这个问题?你能分享你的代码吗?很好,我总是很惊讶有多少方法可以解决一项任务。嗨,苏珊特!谢谢你的帮助!让我试试我的代码,看看它是如何工作的。很好,我总是很惊讶有多少方法可以解决一个任务。嗨,苏珊特!谢谢你的帮助!让我试试我的代码,看看它是如何工作的。谢谢你苏门德拉!我会检查我的实际数据。谢谢你苏门德拉!我会检查我的实际数据。嗨,安德烈亚斯,谢谢你的快速回答。我会申请的。嗨,安德烈亚斯,谢谢你的快速回答。我将应用它。