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

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

    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



답변

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


답변

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


답변

다른 가능성은 사용 .pivot_table()하고 있습니다.aggfunc='size'

df_solution = df.pivot_table(index=['Group','Size'], aggfunc='size')


답변