팬더에서 발생을 계산하는 가장 효율적인 방법은 무엇입니까?


131

다음과 같이 큰 (약 12M 행) 데이터 프레임 df가 있습니다.

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

따라서 다음은 적시에 실행되었습니다.

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

그러나 실행하는 데 예상치 못한 시간이 오래 걸립니다.

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

내가 여기서 뭘 잘못하고 있니? 큰 데이터 프레임에서 발생을 계산하는 더 좋은 방법이 있습니까?

df.word.describe()

꽤 잘 실행 되었으므로이 Occurrences_of_Words 데이터 프레임을 빌드하는 데 시간이 오래 걸리지 않을 것입니다.

추신 : 답변이 분명하고이 질문을해서 저에게 불이익을 줄 필요가 있다고 생각되면 답변도 포함하십시오. 감사합니다.

답변:


235

나는 df['word'].value_counts()봉사해야 한다고 생각 합니다. 그룹 별 기계를 건너 뛰면 시간이 절약됩니다. 왜 count보다 느려 야하는지 잘 모르겠습니다 max. 둘 다 누락 된 값을 피하기 위해 시간이 걸립니다. (와 비교하십시오 size.)

어쨌든 value_counts는 단어와 같이 객체 유형을 처리 하도록 특별히 최적화 되었으므로 그보다 훨씬 더 잘할 것입니다.


25
감사. 또한 시리즈의 특정 값을 빠르게 계산하는 데 유용하다는 것을 알았습니다. 예를 들어 df.word.value_counts()['myword']약 2 배 빠릅니다 len(df[df.word == 'myword']).
fantabolous

전체 DataFrame을 계산하는 것은 어떻습니까? 이것은 하나의 열에 적용됩니다.
Vaidøtas I.

2
내 자신의 질문에 대답하려면 (그림에서) : .stack () 함수
Vaidøtas I.

@ Vaidøtas Ivøška, 나는 그것을 사용하는 방법을 고심하고 있습니다. 예를 들어 주시겠습니까? 'myword'가 열에 없으면 어떻게합니까? 그런 다음 KeyError가 발생합니다.
Newbielp

2
@Newbielp, 나는 이것을했다 : df [[i의 경우 column_names]]. astype ( 'str'). stack (). value_counts (). sum () 선택한 각 열을 str 유형으로 설정하고 모든 개별을 쌓는 것과 같습니다. 기본적으로 하나의 열을 형성 한 다음 해당 열에 대해 value_counts () 및 sum ()을 수행합니다. :) 스택은 매우 유용합니다. 가장 확실한 선택은 아니지만 내 유스 케이스의 매력처럼 작동했습니다
.


11

이전 답변에 추가 된 것입니다. 실제 데이터를 처리 할 때 null 값이있을 수 있으므로 옵션을 사용하여 계산에 값을 포함하는 것도 유용합니다 dropna=False( 기본값은True ).

예를 들면 :

>>> df['Embarked'].value_counts(dropna=False)
S      644
C      168
Q       77
NaN      2
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.