当列表位于熊猫数据帧列中时,我需要获取列表中每个元素的频率。
它喜欢data.groupby(["element in a","element in 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。
我想知道是否有一种有效/直接的方法来做到这一点。
谢谢
使用explode
分解列表。记得在第二次爆炸前reset_index
。
然后使用group_by
来计算出现次数。
最后使用unstack
将系列转换为数据帧
df.explode('a').reset_index(drop=True).explode('b').groupby(['b', 'a']).a.count().unstack()