为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用熊猫获取数据框列(具有字符串数组)中每个元素的频率?

如何使用熊猫获取数据框列(具有字符串数组)中每个元素的频率?

心有法竹 2022-07-12 18:06:08
我在python中有一个熊猫数据框,如下所示:df['column'] = [abc, mno]               [mno, pqr]               [abc, mno]               [mno, pqr]我想得到下面每个项目的计数:abc = 2, mno= 4 ,pqr = 2我可以对每一行进行迭代以计数,但这不是我正在寻找的那种解决方案。如果有任何方法可以使用 iloc 或与之相关的任何东西,请向我提出建议。我查看了具有类似问题的各种解决方案,但没有一个满足我的方案。
查看完整描述

2 回答

?
RISEBY

TA贡献1856条经验 获得超5个赞

这是我如何使用它来解决它.explode(),.value_counts()您还可以将其分配为一列或随心所欲地使用输出:在一行中:


print(df.explode('column')['column'].value_counts())

完整示例:


import pandas as pd

data_1 = {'index':[0,1,2,3],'column':[['abc','mno'],['mno','pqr'],['abc','mno'],['mno','pqr']]}

df = pd.DataFrame(data_1)

df = df.set_index('index')

print(df)

           column

index            

0      [abc, mno]

1      [mno, pqr]

2      [abc, mno]

3      [mno, pqr]

在这里,我们执行.explode()从列表中创建单个值和 value_counts() 来计算唯一值的重复:


df_new = df.explode('column')

print(df_new['column'].value_counts())

输出:


mno    4

abc    2

pqr    2


查看完整回答
反对 回复 2022-07-12
?
凤凰求蛊

TA贡献1825条经验 获得超4个赞

利用collections.Counter


from collections import Counter

from itertools import chain


Counter(chain.from_iterable(df.column))


Out[196]: Counter({'abc': 2, 'mno': 4, 'pqr': 2})

%时间


df1 = pd.concat([df]*10000, ignore_index=True)


In [227]: %timeit pd.Series(Counter(chain.from_iterable(df1.column)))

14.3 ms ± 279 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)


In [228]: %timeit df1.column.explode().value_counts()

127 ms ± 3.06 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)


查看完整回答
反对 回复 2022-07-12
  • 2 回答
  • 0 关注
  • 130 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号