当列表位于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。
我想知道是否有一种有效/直接的方法来做到这一点。
谢谢
答案 0 :(得分:2)
使用explode
爆炸列表。请记住在第二次爆炸前reset_index
。
然后使用group_by
对出现的次数进行计数。
最后使用unstack
将系列转换为数据框
df.explode('a').reset_index(drop=True).explode('b').groupby(['b', 'a']).a.count().unstack()