将列表拆分为 pandas 中的列

Split list into columns in pandas

我有一个这样的数据框

df = (pd.DataFrame({'ID': ['ID1', 'ID2', 'ID3'], 
                    'Values': [['AB', 'BC'], np.NaN, ['AB', 'CD']]}))

df

    ID  Values
0   ID1 [AB, BC]
1   ID2   NaN
2   ID3 [AB, CD]

我想将列表中的项目拆分成列,这样

    ID  AB  BC  CD
0   ID1 1   1   0
1   ID2 0   0   0
2   ID3 1   0   1

Pandas 函数处理缺失值很好,所以使用 Series.str.join with Series.str.get_dummies, DataFrame.pop 用于提取列,最后 join 到原始数据:

df = df.join(df.pop('Values').str.join('|').str.get_dummies())
print (df)
    ID  AB  BC  CD
0  ID1   1   1   0
1  ID2   0   0   0
2  ID3   1   0   1

编辑:如果值不是列表,则只有列表的字符串表示使用 ast.literal_eval 转换为列表:

import ast

df = (df.join(df.pop('Values')
        .apply(ast.literal_eval)
        .str.join('|')
        .str.get_dummies()))