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

我在python中有一个熊猫数据框,如下所示:


df['column'] = [abc, mno]

               [mno, pqr]

               [abc, mno]

               [mno, pqr]


我想得到下面每个项目的计数:


abc = 2, 

mno= 4 ,

pqr = 2

我可以对每一行进行迭代以计数,但这不是我正在寻找的那种解决方案。如果有任何方法可以使用 iloc 或与之相关的任何东西,请向我提出建议。


我查看了具有类似问题的各种解决方案,但没有一个满足我的方案。


心有法竹
浏览 131回答 2
2回答

RISEBY

这是我如何使用它来解决它.explode(),.value_counts()您还可以将其分配为一列或随心所欲地使用输出:在一行中:print(df.explode('column')['column'].value_counts())完整示例:import pandas as pddata_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)           columnindex            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    4abc    2pqr    2

凤凰求蛊

利用collections.Counterfrom collections import Counterfrom itertools import chainCounter(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)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python