Python : Pandas 데이터 프레임의 두 열 (변수)을 기반으로 빈도 수를 가져옵니다.


93

안녕하세요, 다음 데이터 프레임이 있습니다.

    Group           Size

    Short          Small
    Short          Small
    Moderate       Medium
    Moderate       Small
    Tall           Large

동일한 행이 데이터 프레임에 나타나는 빈도를 계산하고 싶습니다.

    Group           Size      Time

    Short          Small        2
    Moderate       Medium       1 
    Moderate       Small        1
    Tall           Large        1

1
대안을 포함한 성능에 대한 참고 사항 : Pandas groupby.size vs series.value_counts vs collections.Counter 다중 시리즈
jpp

답변:


145

groupby의 size다음을 사용할 수 있습니다 .

In [11]: df.groupby(["Group", "Size"]).size()
Out[11]:
Group     Size
Moderate  Medium    1
          Small     1
Short     Small     2
Tall      Large     1
dtype: int64

In [12]: df.groupby(["Group", "Size"]).size().reset_index(name="Time")
Out[12]:
      Group    Size  Time
0  Moderate  Medium     1
1  Moderate   Small     1
2     Short   Small     2
3      Tall   Large     1

7
감사. 빈도 ( "시간")에 따라 상위 k (= 20) 값을 선택하기위한 사소한 추가 : df.groupby ([ "Group", "Size"]). size (). reset_index (name = "Time") .sort_values ​​(by = 'Time', ascending = False) .head (20);
Dileep Kumar Patchigolla

1
을 사용 .size()하면은 .size().reset_index(name="Time")DataFrame 인 동안 시리즈가 반환됩니다 . 고마워 앤디.
alemol

또는 df.groupby(by=["Group", "Size"], as_index=False).size()간단하게 할 수 있습니다
Naveen Kumar

51

Pandas 1.1 이후 업데이트는value_counts 이제 여러 열을 허용합니다.

df.value_counts(["Group", "Size"])

시도해 볼 수도 있습니다. pd.crosstab()

Group           Size

Short          Small
Short          Small
Moderate       Medium
Moderate       Small
Tall           Large

pd.crosstab(df.Group,df.Size)


Size      Large  Medium  Small
Group                         
Moderate      0       1      1
Short         0       0      2
Tall          1       0      0

편집 : 밖으로 나가기 위해

pd.crosstab(df.Group,df.Size).replace(0,np.nan).\
     stack().reset_index().rename(columns={0:'Time'})
Out[591]: 
      Group    Size  Time
0  Moderate  Medium   1.0
1  Moderate   Small   1.0
2     Short   Small   2.0
3      Tall   Large   1.0

7
좋은. margins=True한계 카운트를 얻기 위해 추가 할 수도 있습니다 !
Matt Hancock

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.