Don*_*son 69 python numpy pandas difference
这是熊猫groupby("x").count和groupby("x").size熊猫之间的区别?
尺寸只是排除零吗?
EdC*_*ica 80
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
Run Code Online (Sandbox Code Playgroud)
只是为@ 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
Run Code Online (Sandbox Code Playgroud)
熊猫的大小和数量有什么区别?
其他答案指出了这种差异,但是,说“ 计数NaN而没有计数” 并不完全准确。尽管确实计入了NaN,但这实际上是由于返回被调用对象的大小(或长度)这一事实而导致的。自然地,这还包括NaN的行/值。sizecountsizesize
因此,总而言之,size返回Series / DataFrame 1的大小,
df = pd.DataFrame({'A': ['x', 'y', np.nan, 'z']})
df
A
0 x
1 y
2 NaN
3 z
Run Code Online (Sandbox Code Playgroud)
df.A.size
# 4
Run Code Online (Sandbox Code Playgroud)
...同时count计算非NaN值:
df.A.count()
# 3
Run Code Online (Sandbox Code Playgroud)
请注意,这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
Run Code Online (Sandbox Code Playgroud)
考虑,
df.groupby('A').size()
A
a 3
b 2
c 3
dtype: int64
Run Code Online (Sandbox Code Playgroud)
与,
df.groupby('A').count()
B
A
a 2
b 0
c 2
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
使用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
Run Code Online (Sandbox Code Playgroud)
但是count不起作用;返回一个空的DataFrame:
df.pivot_table(index='A', columns='B', aggfunc='count')
Empty DataFrame
Columns: []
Index: [0, 1]
Run Code Online (Sandbox Code Playgroud)
我认为这样'count'做的原因是必须对传递给该values论证的系列进行处理,而当什么都没有通过时,熊猫决定不做任何假设。
| 归档时间: |
|
| 查看次数: |
22834 次 |
| 最近记录: |