python - Pandas :每个日期的频率以列表的形式按列分组

标签 python string list pandas pandas-groupby

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

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: unhashable type: 'list'

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

最佳答案

看来你需要 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

关于python - Pandas :每个日期的频率以列表的形式按列分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49222772/

相关文章:

python - 将字符串差异与字符串列表进行比较

python - 读取docx文件,识别和存储斜体文本

c++ - 并发生成顺序键

list - 当其他小部件在 flutter 中位于其顶部时,如何防止呈现给定小部件?

java 反射列表 NoSuchMethodException

python - Pandas - 每个点具有不同颜色图例的散点图

python - 如何修复 google colab 切割混淆矩阵图的问题

python - 运行 for 循环以按列名称的一部分创建数据框

list - 如何在 react-virtualized autosizer 中包装 material-ui ListItem

python - 如何跨多个 DataFrame 应用 if 语句?