我想从 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/