>백엔드 개발 >파이썬 튜토리얼 >루프를 사용하지 않고 어떻게 Pandas DataFrames 내에서 ID 및 그룹별로 용어 발생을 효율적으로 그룹화하고 계산할 수 있습니까?

루프를 사용하지 않고 어떻게 Pandas DataFrames 내에서 ID 및 그룹별로 용어 발생을 효율적으로 그룹화하고 계산할 수 있습니까?

DDD
DDD원래의
2024-11-29 00:01:12543검색

How can I efficiently group and count occurrences of terms within Pandas DataFrames by ID and group without using loops?

Pandas DataFrames에서 값 그룹화 및 계산

데이터 분석에서는 데이터를 그룹화하고 특정 값이나 용어의 발생 횟수를 계산해야 하는 경우가 많습니다. 이러한 유형의 집계는 Pandas의 groupby 및 size 기능을 사용하여 쉽게 달성할 수 있습니다.

문제:

다음 열이 있는 DataFrame df가 있다고 가정합니다: id, 그룹, 용어. 목표는 루프를 사용하지 않고 각 ID와 그룹 조합에 대해 각 고유 용어의 발생 횟수를 계산하는 것입니다.

해결책:

이를 달성하려면 다음 단계를 사용할 수 있습니다.

  1. Groupby: DataFrame 그룹화 기준 groupby(['id', 'group', 'term'])를 사용하는 세 개의 열. 이는 이러한 열의 고유한 조합을 기반으로 데이터를 그룹으로 분할합니다.
  2. 크기: 그룹화된 데이터에 크기 함수를 적용합니다. size는 각 그룹의 행 수를 계산하여 각 ID-그룹 쌍 내 각 고유 용어의 발생 횟수를 효과적으로 계산합니다.
  3. Unstack: groupby 작업의 결과는 다음과 같습니다. 계층적 인덱스. ID-그룹 쌍을 나타내는 행과 고유한 용어를 나타내는 열이 있는 테이블을 생성하려면 unstack(fill_value=0)을 사용할 수 있습니다. 이렇게 하면 계층적 인덱스가 언스택되고 누락된 값이 모두 0으로 채워집니다.

결과 DataFrame은 다음 레이아웃과 유사합니다.

여기에 이미지 설명을 입력하세요

예 코드:

df = pd.DataFrame([
    (1, 1, 'term1'),
    (1, 2, 'term2'),
    (1, 1, 'term1'),
    (1, 1, 'term2'),
    (2, 2, 'term3'),
    (2, 3, 'term1'),
    (2, 2, 'term1')
], columns=['id', 'group', 'term'])

result = df.groupby(['id', 'group', 'term']).size().unstack(fill_value=0)

print(result)

출력:

   term1  term2  term3
id group             
1   1      2      1
2   2      2      1
   3      1      0

성능:

대규모 데이터 세트의 경우 그룹화 및 크기 작업은 계산 비용이 많이 들 수 있습니다. 다음 코드는 1,000,000개의 행이 있는 DataFrame을 그룹화하고 계산하기 위한 타이밍 통계를 제공합니다.

df = pd.DataFrame(dict(id=np.random.choice(100, 1000000),
                       group=np.random.choice(20, 1000000),
                       term=np.random.choice(10, 1000000)))

%timeit df.groupby(['id', 'group', 'term']).size().unstack(fill_value=0)

위 내용은 루프를 사용하지 않고 어떻게 Pandas DataFrames 내에서 ID 및 그룹별로 용어 발생을 효율적으로 그룹화하고 계산할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.