그게 팬더 groupby("x").count
와 의 차이점 groupby("x").size
입니까?
크기는 nil을 제외합니까?
답변:
size
NaN
값을 포함하고 다음을 포함 count
하지 않습니다.
In [46]:
df = pd.DataFrame({'a':[0,0,1,2,2,2], 'b':[1,2,3,4,np.NaN,4], 'c':np.random.randn(6)})
df
Out[46]:
a b c
0 0 1 1.067627
1 0 2 0.554691
2 1 3 0.458084
3 2 4 0.426635
4 2 NaN -2.238091
5 2 4 1.256943
In [48]:
print(df.groupby(['a'])['b'].count())
print(df.groupby(['a'])['b'].size())
a
0 2
1 1
2 2
Name: b, dtype: int64
a
0 2
1 1
2 3
dtype: int64
팬더의 크기와 개수의 차이점은 무엇입니까?
다른 답변은 차이점을 지적했지만 "N을 계산하는 반면 그렇지 않은" 이라고 말하는 것은 완전히 정확 하지 않습니다. 실제로 NaN을 계산 하지만 실제로 는 호출 된 객체 의 크기 (또는 길이) 를 반환 한다는 사실의 결과입니다 . 당연히 여기에는 NaN 인 행 / 값도 포함됩니다.size
count
size
size
요약하자면 size
Series / DataFrame 1 의 크기를 반환합니다 .
df = pd.DataFrame({'A': ['x', 'y', np.nan, 'z']})
df
A
0 x
1 y
2 NaN
3 z
df.A.size
# 4
... count
비 NaN 값 을 계산하는 동안 :
df.A.count()
# 3
공지 size
특성을된다 (동일한 결과를 제공 len(df)
또는 len(df.A)
). count
함수입니다.
1. DataFrame.size
또한 속성이며 DataFrame (행 x 열)의 요소 수를 반환합니다.
GroupBy
-출력 구조기본적인 차이점 외에도 GroupBy.size()
vs를 호출 할 때 생성 된 출력의 구조에도 차이가 GroupBy.count()
있습니다.
df = pd.DataFrame({'A': list('aaabbccc'), 'B': ['x', 'x', np.nan, np.nan, np.nan, np.nan, 'x', 'x']})
df
A B
0 a x
1 a x
2 a NaN
3 b NaN
4 b NaN
5 c NaN
6 c x
7 c x
중히 여기다,
df.groupby('A').size()
A
a 3
b 2
c 3
dtype: int64
대,
df.groupby('A').count()
B
A
a 2
b 0
c 2
GroupBy.count
count
모든 열 을 호출하면 DataFrame 을 GroupBy.size
반환하고 Series 를 반환합니다.
그 이유는 size
모든 열에 대해 동일하므로 단일 결과 만 반환됩니다. 한편 count
결과는 각 열에있는 NaN 수에 따라 달라 지므로 각 열에 대해이 호출됩니다.
pivot_table
또 다른 예는 pivot_table
이 데이터를 처리 하는 방법 입니다. 다음의 교차 표를 계산한다고 가정합니다.
df
A B
0 0 1
1 0 1
2 1 2
3 0 2
4 0 0
pd.crosstab(df.A, df.B) # Result we expect, but with `pivot_table`.
B 0 1 2
A
0 1 2 1
1 0 0 1
를 사용 pivot_table
하면 다음을 발행 할 수 있습니다 size
.
df.pivot_table(index='A', columns='B', aggfunc='size', fill_value=0)
B 0 1 2
A
0 1 2 1
1 0 0 1
그러나 count
작동하지 않습니다. 빈 DataFrame이 반환됩니다.
df.pivot_table(index='A', columns='B', aggfunc='count')
Empty DataFrame
Columns: []
Index: [0, 1]
그 이유 'count'
는 values
인수에 전달 된 시리즈에 대해 수행되어야 하고 아무것도 전달되지 않으면 팬더는 가정하지 않기로 결정하기 때문이라고 생각합니다.
@Edchum의 답변에 약간만 추가하면 데이터에 NA 값이 없더라도 이전 예제를 사용하여 count ()의 결과가 더 장황합니다.
grouped = df.groupby('a')
grouped.count()
Out[197]:
b c
a
0 2 2
1 1 1
2 2 3
grouped.size()
Out[198]:
a
0 2
1 1
2 3
dtype: int64
size
와 동등한 우아한 것 같습니다 count
.
위의 모든 답변 외에도 중요해 보이는 차이점을 하나 더 지적하고 싶습니다.
Panda의 Datarame
크기와 개수를 Java의 Vectors
크기 및 길이 와 연관시킬 수 있습니다 . 벡터를 만들 때 미리 정의 된 메모리가 할당됩니다. 요소를 추가하는 동안 차지할 수있는 요소 수에 가까워지면 더 많은 메모리가 할당됩니다. 마찬가지로 DataFrame
요소를 추가하면 할당 된 메모리가 증가합니다.
Size 속성은 할당 된 메모리 셀의 DataFrame
수를 제공 하는 반면 count는 실제로 존재하는 요소의 수를 제공합니다 DataFrame
. 예를 들면
에는 3 개의 행이 있지만 DataFrame
크기는 6입니다.
이 답변 커버의 크기에 대한 계수의 차이 DataFrame
가 아니라 Pandas Series
. 나는 무슨 일이 일어나는지 확인하지 않았다Series