Đó là sự khác biệt giữa groupby("x").count
và groupby("x").size
ở gấu trúc?
Kích thước có loại trừ nil không?
Đó là sự khác biệt giữa groupby("x").count
và groupby("x").size
ở gấu trúc?
Kích thước có loại trừ nil không?
Câu trả lời:
size
bao gồm NaN
các giá trị, count
không:
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
Sự khác biệt giữa kích thước và số lượng ở gấu trúc là gì?
Các câu trả lời khác đã chỉ ra sự khác biệt, tuy nhiên, không hoàn toàn chính xác khi nói " size
đếm NaN trong khi count
không tính". Mặc dù size
thực sự không đếm NaN, đây thực sự là hệ quả của việc size
trả về kích thước (hoặc chiều dài) của đối tượng mà nó được gọi. Đương nhiên, điều này cũng bao gồm các hàng / giá trị là NaN.
Vì vậy, để tóm tắt, size
trả về kích thước của 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
... trong khi count
đếm các giá trị không phải NaN:
df.A.count()
# 3
Lưu ý rằng đó size
là một thuộc tính (cho kết quả giống như len(df)
hoặc len(df.A)
). count
là một chức năng.
1. DataFrame.size
cũng là một thuộc tính và trả về số phần tử trong DataFrame (hàng x cột).
GroupBy
- Cấu trúc đầu raBên cạnh đó là sự khác biệt cơ bản, cũng có sự khác biệt trong cấu trúc của sản lượng được tạo ra khi gọi 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
Xem xét,
df.groupby('A').size()
A
a 3
b 2
c 3
dtype: int64
Đấu với,
df.groupby('A').count()
B
A
a 2
b 0
c 2
GroupBy.count
trả về DataFrame khi bạn gọi count
trên tất cả cột, trong khi GroupBy.size
trả về Chuỗi.
Lý do size
là tất cả các cột đều giống nhau, vì vậy chỉ một kết quả duy nhất được trả về. Trong khi đó, giá trị count
được gọi cho mỗi cột, vì kết quả sẽ phụ thuộc vào số lượng NaN mỗi cột có.
pivot_table
Một ví dụ khác là cách pivot_table
xử lý dữ liệu này. Giả sử chúng ta muốn tính toán lập bảng chéo của
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
Với pivot_table
, bạn có thể phát hành 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
Nhưng count
không hoạt động; một DataFrame trống được trả về:
df.pivot_table(index='A', columns='B', aggfunc='count')
Empty DataFrame
Columns: []
Index: [0, 1]
Tôi tin rằng lý do của điều này là nó 'count'
phải được thực hiện trên chuỗi được chuyển đến values
đối số, và khi không có gì được thông qua, gấu trúc quyết định không đưa ra giả định nào.
Chỉ cần thêm một chút vào câu trả lời của @ Edchum, ngay cả khi dữ liệu không có giá trị NA, kết quả của count () dài dòng hơn, sử dụng ví dụ trước:
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
thanh lịch tương đương với count
gấu trúc.
Khi chúng ta xử lý các khung dữ liệu thông thường thì chỉ có sự khác biệt là bao gồm các giá trị NAN, có nghĩa là số đếm không bao gồm các giá trị NAN trong khi đếm hàng.
Nhưng nếu chúng ta đang sử dụng các hàm này với groupby
thì, để có được kết quả chính xác, count()
chúng ta phải liên kết bất kỳ trường số nào với trường groupby
để có được số nhóm chính xác mà size()
không cần loại liên kết này.
Ngoài tất cả các câu trả lời trên, tôi muốn chỉ ra một điểm khác biệt nữa mà tôi có vẻ quan trọng.
Bạn có thể tương quan với Panda's Datarame
kích thước và số lượng với Vectors
kích thước và chiều dài của Java . Khi chúng ta tạo vector, một số bộ nhớ được xác định trước sẽ được cấp cho nó. khi chúng ta tiếp cận gần hơn số phần tử mà nó có thể chiếm trong khi thêm phần tử, nhiều bộ nhớ hơn được cấp cho nó. Tương tự, DataFrame
khi chúng ta thêm các phần tử, bộ nhớ được cấp cho nó sẽ tăng lên.
Thuộc tính size cho biết số ô nhớ được cấp phát DataFrame
trong khi count cho biết số phần tử thực sự có trongDataFrame
. Ví dụ,
Bạn có thể thấy mặc dù có 3 hàng DataFrame
, nhưng kích thước của nó là 6.
Câu trả lời này bao gồm sự khác biệt về kích thước và số lượng đối với DataFrame
và không Pandas Series
. Tôi chưa kiểm tra điều gì xảy ra vớiSeries