groupby("x").count
和groupby("x").size
熊猫和之间的区别是吗?
大小是否仅排除nil?
Answers:
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
熊猫的大小和数量有什么区别?
其他答案指出了差异,但是,说“计数NaN而没有计数”并不是完全准确的。虽然确实计入NaN,但这实际上是由于返回对象的大小(或长度)而导致的size
count
size
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
-输出结构除了基本的区别外,调用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
论证的系列进行处理,而当什么都没有通过时,熊猫决定不做任何假设。
当我们处理普通数据帧时,只有差异将包含NAN值,这意味着计数行时计数不包括NAN值。
但是,如果我们将这些函数与groupby
then一起使用,则为了获得正确的结果,count()
我们必须将任何数字字段与关联,groupby
以获取size()
不需要这种类型的关联的确切组数。
除了上述所有答案外,我还要指出我似乎很重要的另一点区别。
您可以将Panda的Datarame
大小和计数与Java的Vectors
大小和长度相关联。创建矢量时,会为其分配一些预定义的内存。当我们接近添加元素时可以占用的元素数量时,会为其分配更多的内存。同样,在DataFrame
添加元素时,分配给它的内存也会增加。
Size属性给出分配给的存储单元的数量,DataFrame
而count提供实际存在于中的元素的数量DataFrame
。例如,
您可以看到虽然有3行DataFrame
,但其大小为6。
这个答案盖大小,相对于数量差异DataFrame
,而不是Pandas Series
。我没有检查会发生什么Series