Đó là sự khác biệt giữa groupby("x").countvà 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").countvà groupby("x").sizeở gấu trúc?
Kích thước có loại trừ nil không?
Câu trả lời:
sizebao gồm NaNcác giá trị, countkhô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 countkhông tính". Mặc dù sizethực sự không đếm NaN, đây thực sự là hệ quả của việc sizetrả 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, sizetrả 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 đó sizelà một thuộc tính (cho kết quả giống như len(df)hoặc len(df.A)). countlà một chức năng.
1. DataFrame.sizecũ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.counttrả về DataFrame khi bạn gọi counttrên tất cả cột, trong khi GroupBy.sizetrả về Chuỗi.
Lý do sizelà 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_tableMột ví dụ khác là cách pivot_tablexử 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 countkhô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
sizethanh lịch tương đương với countgấ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 groupbythì, để 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 Vectorskí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ự, DataFramekhi 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 DataFrametrong 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 DataFramevà không Pandas Series. Tôi chưa kiểm tra điều gì xảy ra vớiSeries