cách hiệu quả nhất để đếm sự xuất hiện trong gấu trúc là gì?


131

Tôi có một df dataframe lớn (khoảng 12 triệu hàng) với câu:

df.columns = ['word','documents','frequency']

Vì vậy, sau đây chạy một cách kịp thời:

word_grouping = df[['word','frequency']].groupby('word')
MaxFrequency_perWord = word_grouping[['frequency']].max().reset_index()
MaxFrequency_perWord.columns = ['word','MaxFrequency']

Tuy nhiên, điều này đang mất một thời gian dài bất ngờ để chạy:

Occurrences_of_Words = word_grouping[['word']].count().reset_index()

Tôi làm gì sai ở đây? Có cách nào tốt hơn để đếm số lần xuất hiện trong một khung dữ liệu lớn không?

df.word.describe()

chạy khá tốt, vì vậy tôi thực sự không mong đợi khung dữ liệu xảy ra này sẽ mất nhiều thời gian để xây dựng.

ps: Nếu câu trả lời là rõ ràng và bạn cảm thấy cần phải phạt tôi vì đã hỏi câu hỏi này, vui lòng bao gồm cả câu trả lời. cảm ơn bạn.

Câu trả lời:


235

Tôi nghĩ df['word'].value_counts()nên phục vụ. Bằng cách bỏ qua máy móc nhóm, bạn sẽ tiết kiệm được một chút thời gian. Tôi không chắc tại sao countnên chậm hơn nhiều max. Cả hai mất một thời gian để tránh bỏ lỡ các giá trị. (So ​​sánh với size.)

Trong mọi trường hợp, value_counts đã được tối ưu hóa cụ thể để xử lý loại đối tượng, như từ của bạn, vì vậy tôi nghi ngờ bạn sẽ làm tốt hơn thế nhiều.


25
Cảm ơn. Tôi cũng thấy điều này hữu ích cho việc tăng tốc đếm một giá trị cụ thể trong một chuỗi. ví dụ như df.word.value_counts()['myword']là nhanh gấp đôi len(df[df.word == 'myword']).
fantabolous 10/03/2015

Còn về việc đếm trên toàn bộ DataFrame thì sao? Điều này làm việc cho một cột.
Vaidøtas I.

2
Để trả lời câu hỏi của riêng tôi (đã tìm ra): hàm .stack ()
Vaidøtas I.

@ Vaidøtas Ivøška, tôi đã phải vật lộn để sử dụng nó. Bạn có thể cho một ví dụ? Nếu 'myword' không có trong cột thì sao? Sau đó, nó tăng KeyError.
Newbielp

2
@Newbielp, tôi đã làm điều này: df [[i for i in cột_names]]. Astype ('str'). Stack (). Value_counts (). Sum () tương đương với việc đặt từng cột được chọn thành loại str, xếp chồng từng cá nhân các cột trên cùng, hình thành về cơ bản một cột và sau đó thực hiện value_counts () và sum () trên một cột đó. :) Stack khá hữu ích, nó có thể không phải là sự lựa chọn rõ ràng nhất, nhưng hoạt động như một cơ duyên cho trường hợp sử dụng của tôi :)
Vaidøtas I.

19

Khi bạn muốn đếm tần suất của dữ liệu phân loại trong một cột trong dữ liệu pandas DataFrame sử dụng: df['Column_Name'].value_counts()

- Nguồn .


10

Chỉ là một bổ sung cho các câu trả lời trước. Chúng ta đừng quên rằng khi xử lý dữ liệu thực có thể có các giá trị null, do đó, cũng rất hữu ích khi đưa vào các giá trị bằng cách sử dụng tùy chọn dropna=False( mặc định làTrue )

Một ví dụ:

>>> df['Embarked'].value_counts(dropna=False)
S      644
C      168
Q       77
NaN      2
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.