데이터 프레임 열에서 값이 발생하는 빈도를 계산 b cat a (고유 한 값과 빈도를 보여주는)와

데이터 세트가 있습니다

|category|
cat a
cat b
cat a

(고유 한 값과 빈도를 보여주는)와 같은 것을 반환하고 싶습니다.

category | freq |
cat a       2
cat b       1


답변

사용 groupbycount:

In [37]:
df = pd.DataFrame({'a':list('abssbab')})
df.groupby('a').count()

Out[37]:

   a
a
a  2
b  3
s  2

[3 rows x 1 columns]

온라인 문서를 참조하십시오 : http://pandas.pydata.org/pandas-docs/stable/groupby.html

또한 value_counts()@DSM이 언급했듯이 여기에 고양이를 껍질을 벗기는 여러 가지 방법이 있습니다.

In [38]:
df['a'].value_counts()

Out[38]:

b    3
a    2
s    2
dtype: int64

원래 데이터 프레임에 빈도를 다시 추가 transform하려면 정렬 된 인덱스를 반환하십시오.

In [41]:
df['freq'] = df.groupby('a')['a'].transform('count')
df

Out[41]:

   a freq
0  a    2
1  b    3
2  s    2
3  s    2
4  b    3
5  a    2
6  b    3

[7 rows x 2 columns]

답변

모든 열에 적용하려면 다음을 사용할 수 있습니다.

df.apply(pd.value_counts)

그러면 열 기반 집계 함수 (이 경우 value_counts)가 각 열에 적용됩니다.


답변

df.category.value_counts()

이 짧은 코드는 원하는 출력을 제공합니다.

열 이름에 공백이 있으면 사용할 수 있습니다

df['category'].value_counts()

답변

df.apply(pd.value_counts).fillna(0)

value_counts- 고유 한 값의 개수를 포함하는 객체를 반환합니다.

적용 -모든 열의 빈도를 세십시오. 을 설정 axis=1하면 모든 행에 빈도가 표시됩니다

fillna (0)-출력을 더 멋지게 만듭니다. NaN을 0으로 변경


답변

0.18.1에서 groupby함께 count고유 한 값의 주파수를 제공하지 않습니다 :

>>> df
   a
0  a
1  b
2  s
3  s
4  b
5  a
6  b

>>> df.groupby('a').count()
Empty DataFrame
Columns: []
Index: [a, b, s]

그러나 고유 값과 주파수는 다음을 사용하여 쉽게 결정됩니다 size.

>>> df.groupby('a').size()
a
a    2
b    3
s    2

df.a.value_counts()정렬 된 값을 사용하면 (내림차순, 즉 가장 큰 값이 먼저) 기본적으로 반환됩니다.


답변

df의 여러 열에 대해 목록 이해 및 value_counts 사용

[my_series[c].value_counts() for c in list(my_series.select_dtypes(include=['O']).columns)]

https://stackoverflow.com/a/28192263/786326


답변

DataFrame에 동일한 유형의 값이 있으면 numpy.unique ()return_counts=True 에서 설정할 수도 있습니다 .

index, counts = np.unique(df.values,return_counts=True)

값이 정수이면 np.bincount () 가 더 빠를 수 있습니다.