2013-02-28 40 views
20

Tôi có khung dữ liệu và tôi muốn biết số lần một cột nhất định có giá trị thường xuyên nhất.Làm thế nào để có được số lượng giá trị thường xuyên nhất trong một cột?

tôi cố gắng để làm điều đó theo cách sau:

items_counts = df['item'].value_counts() 
max_item = items_counts.max() 

Kết quả là tôi nhận được:

ValueError: cannot convert float NaN to integer 

Theo như tôi hiểu, với dòng đầu tiên tôi nhận được hàng loạt, trong đó các giá trị từ một cột được sử dụng làm khóa và tần số của các giá trị này được sử dụng làm giá trị. Vì vậy, tôi chỉ cần tìm giá trị lớn nhất trong bộ truyện và, vì một số lý do, nó không hoạt động. Có ai biết làm thế nào vấn đề này có thể được giải quyết?

+0

Có 'na' trong cột của bạn không? Nếu vậy bạn nên loại bỏ chúng bằng 'dropna' hoặc' fillna'. – beardc

Trả lời

22

Dường như bạn có thể có một số giá trị rỗng trong cột. Bạn có thể thả chúng với df = df.dropna(subset=['item']). Sau đó, df['item'].value_counts().max() sẽ cung cấp cho bạn số lượng tối đa và df['item'].value_counts().idxmax() sẽ mang lại cho bạn giá trị thường xuyên nhất.

+0

Và ... tôi có thể làm điều đó để NA được tính là một giá trị không? I E. Tôi vui mừng trả lại NA nếu đó là giá trị phổ biến nhất. –

+0

@FullDecent sử dụng '.fillna()' thay vì '.dropna()' – beardc

8

Bạn cũng có thể xem xét sử dụng chức năng mode của sciper để bỏ qua NaN. Một giải pháp sử dụng nó có thể trông giống như:

from scipy.stats import mode 
from numpy import nan 
df = DataFrame({"a": [1,2,2,4,2], "b": [nan, nan, nan, 3, 3]}) 
print mode(df) 

Kết quả sẽ như thế nào

(array([[ 2., 3.]]), array([[ 3., 2.]])) 

nghĩa là các giá trị phổ biến nhất là 2 cho các cột đầu tiên và 3 cho phần thứ hai, với tần số 32 tương ứng.

7

Để tiếp tục @jonathanrocher, bạn có thể sử dụng mode trong gấu trúc DataFrame. Nó sẽ cung cấp giá trị thường xuyên nhất (một hoặc hai) trên các hàng hoặc cột:

import pandas as pd 
import numpy as np 
df = pd.DataFrame({"a": [1,2,2,4,2], "b": [np.nan, np.nan, np.nan, 3, 3]}) 

In [2]: df.mode() 
Out[2]: 
    a b 
0 2 3.0 
Các vấn đề liên quan