Dataframe求眾數的解決方法

2021-09-01 23:01:57 字數 1623 閱讀 5707

pandas在實際使用過程中,遇到如下問題。

有如下乙個dataframe,打算對a的每乙個類別求b的眾數,但是不能使用dataframe.groupby('a').mode(),報如下錯誤。

>>import pandas as pd

>>df = pd.dataframe()

traceback (most recent call last):

file "", line 1, in df.groupby('a').mode()

file "d:\anaconda3\lib\site-packages\pandas\core\groupby\groupby.py", line 762, in __getattr__

raise attributeerror(msg)

首先,定義如下統計函式。

#統計資料

def getlistnum(li):

li = list(li)

set1 = set(li)

dict1 = {}

for item in set1:

dict1.update()

return dict1

檢視df統計,

a

a 1 2

2 1

3 1

b 1 1

2 2

3 2

name: b, dtype: int64

考慮groupby()方法可以通過agg呼叫外部函式,因此嘗試了以下方法:

法1.使用scipy.stats.mode():df中的b類別有兩個眾數,返回了b類別的眾數取了

較小的結果

>>from scipy import stats

>>df.groupby('a').agg(lambda x: stats.mode(x)[0][0]).reset_index()

a b

0 a 1

1 b 2

法2.使用value_counts(),有兩個眾數以上的時候,返回了b類別的眾數取了較大的結果

>>df.groupby('a').agg(lambda x: x.value_counts().index[0]).reset_index()

a b

0 a 1

1 b 3

法3.使用pd.series.mode():該函式是返回series的眾數的,當眾數有多個時,會返回乙個list,裡面包含了所有眾數

>>df.groupby('a').agg(pd.series.mode).reset_index()

a b

0 a 1

1 b [2, 3]

169 求眾數 229 求眾數 II

不限定時間複雜度的話,很多人會先排序,再遍歷的方法來做。不限定空間複雜度的話,很多人會用hash表來做。那麼,有了這兩個限定,就只能用摩爾投票演算法了。主元素問題典型解法。摩爾投票演算法 時間複雜度o n 空間複雜度o 1 class solution else if nums i ans cnt ...

python求眾數程式 python求眾數問題例項

問題描述 多重集中重數最大的元素稱為眾數.就是乙個可以有重複元素的集合,在這個集合中重複的次數最多的那個數就叫它的眾數.如s 1,2,2,2,3,5 重數是2,其重數為3 例項 如下 list num list num count 0 dict num 從檔案讀入,檔案第一行為集合中元素的個數,以後...

求絕對眾數

已知給定的n個整數存在絕對眾數,以最低的時空複雜度計算該絕對眾數。刪除陣列a中兩個不同的數,絕對眾數不變。若兩個數中有1個是絕對眾數,則剩餘的n 2個數中,絕 對眾數仍然大於 n 2 2 若兩個數中沒有絕對眾數,顯然不影響絕對眾數。演算法描述 記m為候選絕對眾數,出現次數為c,初始化為0。遍歷陣列a...