代码优化 - 将值列表转换为列

Code Optiomiztion - Converting List Of Values Into Columns

我有一个数据框,其中一列是用户 ID,第二列是他拥有的项目的项目 ID 的逗号分隔值组成的字符串。我必须将其转换为结果数据框,该数据框将用户 ID 作为索引,并将唯一项目 ID 作为列,当用户拥有该项目时值为 1,当用户没有该项目时值为 0。下面附上问题的要点和我目前用来解决这个问题的方法。

temp = pd.DataFrame([[100, '10, 20, 30'],[200, '20, 30, 40']], columns=['userid','listofitemids'])
print(temp)

temp.listofitemids = temp.listofitemids.apply(lambda x:set(x.split(', ')))

dat = temp.values

df = pd.DataFrame(data = [[1]*len(dat[0][1])], index = [dat[0][0]], columns=dat[0][1])
for i in range(1, len(dat)):
    t = pd.DataFrame(data = [[1]*len(dat[i][1])], index = [dat[i][0]], columns=dat[i][1])
    df = df.append(t, sort=False)
df.head()

但是,这段代码显然效率低下,我正在寻找一个更快的解决方案来解决这个问题。

让我们尝试 str.splitexplode 然后 crosstab

s = temp.assign(listofitemids=temp['listofitemids'].str.split(', ')).explode('listofitemids')
s = pd.crosstab(s['userid'], s['listofitemids']).mask(lambda x : x.eq(0))
s
Out[266]: 
listofitemids   10  20  30   40
userid                         
100            1.0   1   1  NaN
200            NaN   1   1  1.0