3 回答
TA贡献1825条经验 获得超6个赞
你可以试试这个:
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
TA贡献1998条经验 获得超6个赞
让我们尝试pandas.get_dummies
标记值和groupby
索引以减少数据帧。使用列索引连接pandas.concat
创建。dummies
original 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
TA贡献1858条经验 获得超8个赞
您可以一行完成:
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”值
添加回答
举报