python – Pandas将列爆炸成行

我有一个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
点赞