簡體   English   中英

熊貓計算str系列內的頻率

[英]Pandas count frequencies within str series

給定一個類型為str的Pandas系列,我想獲得str.split返回結果的頻率。

例如,給定系列

s = pd.Series(['abc,def,ghi','ghi,abc'])

我想得到

abc: 2
def: 1
ghi: 2

結果是。 我怎么能得到這個?

編輯:該解決方案應該有效地處理具有5000萬行的大型系列。

那是你要的嗎?

In [29]: from collections import Counter

In [30]: Counter(s.str.split(',').sum())
Out[30]: Counter({'abc': 2, 'def': 1, 'ghi': 2})

要么

In [34]: a = pd.Series(s.str.split(',').sum())

In [35]: a
Out[35]:
0    abc
1    def
2    ghi
3    ghi
4    abc
dtype: object

In [36]: a.groupby(a).size()
Out[36]:
abc    2
def    1
ghi    2
dtype: int64

另一個具有str.splitsumvalue_counts熊貓解決方案:

print pd.Series(s.str.split(',').sum()).value_counts()
abc    2
ghi    2
def    1
dtype: int64

編輯:

更有效的方法:

import pandas as pd
s = pd.Series(['abc,def,ghi','ghi,abc'])
s = pd.concat([s]*10000).reset_index(drop=True)

In [17]: %timeit pd.Series(s.str.split(',').sum()).value_counts()
1 loops, best of 3: 3.1 s per loop

In [18]: %timeit s.str.split(',', expand=True).stack().value_counts()
10 loops, best of 3: 46.2 ms per loop

In [19]: %timeit pd.DataFrame([ x.split(',') for x in s.tolist() ]).stack().value_counts()
10 loops, best of 3: 22.2 ms per loop

In [20]: %timeit pd.Series([item for sublist in [ x.split(',') for x in s.tolist() ] for item in sublist]).value_counts()
100 loops, best of 3: 16.6 ms per loop

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM