将列表变量编码为标志变量
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
我有 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