それがパンダ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.count
count
すべての列を呼び出すと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