熊猫数据框中两列中列表中的元素计数

时间:2019-09-04 06:25:40

标签: python pandas

当列表位于pandas数据框列中时,我需要获取列表中每个元素的频率。

它类似于data.groupby([[a中的元素,b中的元素]])。size(),但列'a'和列'b'是列表。

我需要按'a'和b'b'中的每个元素组合的大小

in data:
        a           b
0   [17, 21, 22]    [zhinan, shejiyuanze, fankui]
1   [17, 21, 23]    [zhinan, shejiyuanze]
2   [17, 21]        [zhinan, shejiyuanze, fankui]
3   [17, 21, 22]    [zhinan, shejiyuanze, fankui]
4   [17, 21]        [zhinan, shejiyuanze, yizhi]

所需的输出:

              17 21 22 23 
zhinan        5  5  2  1
shejiyuanze   .  .  .  . 
fankui        .  .  .  . 
yizhi         .  .  .  .

例如,当a = 17和b = zhinan时,数字为5。当a = 17和b = fankui时,数字为3。当a = 23和b = fankui或b = yizhi时,数字为0。

我想知道是否有一种有效/直接的方法来做到这一点。

谢谢

1 个答案:

答案 0 :(得分:2)

使用explode爆炸列表。请记住在第二次爆炸前reset_index

然后使用group_by对出现的次数进行计数。

最后使用unstack将系列转换为数据框

df.explode('a').reset_index(drop=True).explode('b').groupby(['b', 'a']).a.count().unstack()