我想从熊猫数据框中获取每个日期的技术频率。一个可重现的示例:
data = pd.DataFrame(
{'dates': ['2017-01-31', '2017-02-28', '2017-02-28'],
'tech': [['c++', 'python'], ['c++', 'c', 'java'], ['java']]}
)
最终结果可能看起来像这样(或在行和一栏中列出名称,每个日期和技术都有计数):
date c++ python c java
2017-01-31 1 1 0 0
2017-02-28 1 0 1 2
在第二列中,应将数据分组在一起是技术列表。只需尝试按当前状态对数据进行分组:
data.groupby(['dates', data.tech.values]).count()
产生一个错误:
TypeError:无法散列的类型:“列表”
所以我认为不可能按列表分组。
好像你需要 get_dummies
pd.get_dummies(data.set_index('dates').tech.apply(pd.Series).stack()).sum(level=0)
Out[193]:
c c++ java python
dates
2017-01-31 0 1 0 1
2017-02-28 1 1 2 0
要么 sklearn
from sklearn.preprocessing import MultiLabelBinarizer
mlb = MultiLabelBinarizer()
pd.DataFrame(mlb.fit_transform(data.tech), data.dates, mlb.classes_).sum(level=0)
Out[209]:
c c++ java python
dates
2017-01-31 0 1 0 1
2017-02-28 1 1 2 0
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句