熊猫:每个日期的频率,按列表的形式按列分组

我想从熊猫数据框中获取每个日期的技术频率。一个可重现的示例:

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:无法散列的类型:“列表”

所以我认为不可能按列表分组。

BEN_YO

好像你需要 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章