それがパンダgroupby("x").countとgroupby("x").sizeパンダの違いですか?
サイズはnilを除外するだけですか?
回答:
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をカウントするのにカウントしない」と言うのは完全に正確ではsizeありcountません。一方でsize実際にNaNをカウントしない、これは実際にあるという事実の結果であるsizeリターンサイズのオブジェクトの(または長さ)は、それが上と呼ばれています。当然、これにはNaNである行/値も含まれます。
だから、要約する、sizeシリーズ/データフレームのサイズを返す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.countcountすべての列を呼び出すとDataFrameをGroupBy.size返し、Seriesを返します。
その理由sizeは、すべての列で同じであるため、1つの結果のみが返されます。一方、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パンダインチ
上記のすべての回答に加えて、私が重要と思われるもう1つの違いを指摘したいと思います。
PandaのDatarameサイズとカウントをJavaのVectorsサイズと長さと相関させることができます。ベクターを作成すると、事前定義されたメモリがベクターに割り当てられます。要素を追加するときに占有できる要素の数に近づくと、より多くのメモリが割り当てられます。同様に、DataFrame要素を追加すると、それに割り当てられるメモリが増加します。
サイズ属性は割り当てられたメモリセルのDataFrame数を示し、カウントは実際にに存在する要素の数を示しDataFrameます。例えば、

には3行ありますがDataFrame、サイズは6です。
この回答は、サイズとカウントの違いをカバーしDataFrameていPandas Seriesます。私は何が起こるかをチェックしていませんSeries