将列表变量编码为标志变量

Encoding list variable to flag variable

我有 pandas.DataFrame:

uid | list_var
--------------
 1  | ['v1', 'v2']
 2  | ['v1', 'v3']
 3  | ['v2']
 4  | []
 5  | ['v1', 'v1']

并想转换它:

uid | v1 | v2 | v3
------------------
 1  | 1  | 1  | 0
 2  | 1  | 0  | 1
 3  | 0  | 1  | 0
 4  | 0  | 0  | 0
 5  | 2  | 0  | 0

在 pandas 中最好的方法是什么?

您似乎想使用 .str.count 方法。注意这里的 df 实际上是 Series 。如果您有 DataFrame,请先使用 .squeeze()

In [16]: vs = ['v1', 'v2', 'v3']

In [17]: df
Out[17]:
0    [v1, v2]
1    [v1, v3]
2        [v2]
3          []
4    [v1, v1]
dtype: object

In [18]: pd.concat([df.str.count(v) for v in vs], axis=1, keys=vs)
Out[18]:
   v1  v2  v3
0   1   1   0
1   1   0   1
2   0   1   0
3   0   0   0
4   2   0   0