我有一个DataFrame,每行有两列:date和mentions.最终结果将是每个日期提及的数据帧,如果我可以突破提及,这是我被困的地方,这应该很容易通过GroupBy.原始数据如下所示:
date mentions
2018-01-01 alpha, beta, gamma
2018-01-01 alpha
2018-01-02 beta
2018-01-03 delta
2018-01-05 alpha
2018-01-07 alpha
2018-01-10 delta, gamma
2018-01-11 gamma
我需要将其转换为:
date mentions
2018-01-01 alpha
2018-01-01 beta
2018-01-01 gamma
2018-01-01 alpha
2018-01-02 beta
2018-01-03 delta
2018-01-05 alpha
2018-01-07 alpha
2018-01-10 delta
2018-01-10 gamma
2018-01-11 gamma
最终状态应该如下所示,我可以通过GroupBy值计数(加上重建索引)得到:
date alpha beta gamma delta
2018-01-01 2 1 1 0
2018-01-02 0 1 1 0
2018-01-03 0 0 0 1
2018-01-04 0 0 0 0
2018-01-05 1 0 0 0
2018-01-06 0 0 0 0
2018-01-07 1 0 0 0
2018-01-08 0 0 0 0
2018-01-09 0 0 0 0
2018-01-10 0 0 1 1
2018-01-11 0 0 1 0
我在其他地方已经看到了这个问题的变化,但不太像我的,我觉得很简单,我只是没有看到正确的解决方案.
最佳答案 如果您的最终结果是虚拟列,则使用pd.Series.str.get_dummies
df.set_index('date').mentions.str.get_dummies(', ').sum(level=0)
alpha beta delta gamma
date
2018-01-01 2 1 0 1
2018-01-02 0 1 0 0
2018-01-03 0 0 1 0
2018-01-05 1 0 0 0
2018-01-07 1 0 0 0
2018-01-10 0 0 1 1
2018-01-11 0 0 0 1
正如@Zero所述
06001
alpha beta delta gamma
date
2018-01-01 2 1 0 1
2018-01-02 0 1 0 0
2018-01-03 0 0 1 0
2018-01-04 0 0 0 0
2018-01-05 1 0 0 0
2018-01-06 0 0 0 0
2018-01-07 1 0 0 0
2018-01-08 0 0 0 0
2018-01-09 0 0 0 0
2018-01-10 0 0 1 1
2018-01-11 0 0 0 1