我已经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
在熊猫中做这件事的最佳方法是什么?
答案 0 :(得分:1)
看起来您想要使用.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