นั่นคือความแตกต่างระหว่างgroupby("x").count
และgroupby("x").size
ในหมีแพนด้า?
ขนาดไม่รวมศูนย์หรือไม่?
นั่นคือความแตกต่างระหว่างgroupby("x").count
และgroupby("x").size
ในหมีแพนด้า?
ขนาดไม่รวมศูนย์หรือไม่?
NaN
ค่าต้องสังเกตว่านี่เป็นประเด็นรอง เปรียบเทียบเอาต์พุตของdf.groupby('key').size()
และdf.groupby('key').count()
สำหรับ DataFrame ที่มีหลายซีรี่ส์ ความแตกต่างชัดเจน: count
ทำงานเหมือนกับฟังก์ชันการรวมอื่น ๆ ( mean
, max
... ) แต่size
เฉพาะเจาะจงในการรับจำนวนรายการดัชนีในกลุ่มดังนั้นจึงไม่ดูค่าในคอลัมน์ที่ไม่มีความหมายสำหรับฟังก์ชันนี้ ดูคำตอบ @ cs95 สำหรับคำอธิบายที่ถูกต้อง
คำตอบ:
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
ความแตกต่างระหว่างขนาดและจำนวนในหมีแพนด้าคืออะไร?
คำตอบอื่น ๆ ได้ชี้ให้เห็นความแตกต่าง แต่มันเป็นสิ่งไม่ถูกต้องสมบูรณ์จะพูดว่า " size
นับแก่นแก้วในขณะที่count
ไม่ได้" แม้ว่าsize
จะนับ NaNs แต่จริงๆแล้วนี่เป็นผลมาจากความจริงที่size
ส่งคืนขนาด (หรือความยาว) ของวัตถุที่ถูกเรียกใช้ โดยปกติสิ่งนี้ยังรวมถึงแถว / ค่าซึ่งเป็น NaN
ดังนั้นเพื่อสรุป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
- โครงสร้างผลลัพธ์นอกจากนี้ยังแตกต่างขั้นพื้นฐานนอกจากนี้ยังมีความแตกต่างในโครงสร้างของการส่งออกที่สร้างขึ้นเมื่อเรียกVSGroupBy.size()
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
ส่งคืน DataFrame เมื่อคุณเรียกcount
ใช้คอลัมน์ทั้งหมดในขณะที่GroupBy.size
ส่งกลับซีรี่ส์
เหตุผลที่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
หมีแพนด้า
เมื่อเราจัดการกับดาต้าเฟรมปกติความแตกต่างเพียงอย่างเดียวคือการรวมค่า NAN หมายความว่า count ไม่รวมค่า NAN ในขณะที่นับแถว
แต่ถ้าเราใช้ฟังก์ชันเหล่านี้กับสิ่งgroupby
นั้นเพื่อให้ได้ผลลัพธ์ที่ถูกต้องโดยcount()
เราต้องเชื่อมโยงฟิลด์ตัวเลขใด ๆ กับgroupby
เพื่อให้ได้จำนวนกลุ่มที่แน่นอนโดยที่size()
ไม่จำเป็นต้องมีการเชื่อมโยงประเภทนี้
นอกเหนือจากคำตอบข้างต้นทั้งหมดแล้วฉันอยากจะชี้ให้เห็นความแตกต่างอีกประการหนึ่งซึ่งดูเหมือนว่าสำคัญ
คุณสามารถDatarame
เทียบขนาดของแพนด้าและนับกับVectors
ขนาดและความยาวของ Java เมื่อเราสร้างเวกเตอร์หน่วยความจำที่กำหนดไว้ล่วงหน้าจะถูกจัดสรรให้กับมัน เมื่อเราเข้าใกล้จำนวนองค์ประกอบที่สามารถครอบครองได้ในขณะที่เพิ่มองค์ประกอบหน่วยความจำจะถูกจัดสรรให้กับมันมากขึ้น ในทำนองเดียวกันDataFrame
เมื่อเราเพิ่มองค์ประกอบหน่วยความจำที่จัดสรรให้จะเพิ่มขึ้น
แอตทริบิวต์ขนาดทำให้จำนวนเซลล์หน่วยความจำที่จัดสรรให้ในขณะที่การนับให้จำนวนขององค์ประกอบที่เป็นจริงในปัจจุบันDataFrame
DataFrame
ตัวอย่างเช่น,
คุณสามารถดูได้ว่ามี 3 แถวDataFrame
ขนาดคือ 6
ขนาดนี้คำตอบที่ครอบคลุมและความแตกต่างนับด้วยความเคารพและไม่ได้DataFrame
Pandas Series
ฉันยังไม่ได้ตรวจสอบว่าเกิดอะไรขึ้นกับSeries