Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我使用pandas groupby()在有或没有列选择的情况下获得不同的组大小数字?_Pandas_Pandas Groupby - Fatal编程技术网

为什么我使用pandas groupby()在有或没有列选择的情况下获得不同的组大小数字?

为什么我使用pandas groupby()在有或没有列选择的情况下获得不同的组大小数字?,pandas,pandas-groupby,Pandas,Pandas Groupby,我尝试使用numpy.size()来计算来自pandas Dataframe groupby()的组的组大小,结果很奇怪 数据帧({'A':[1,1,2,2],'B':[1,2,3,4],'C':[0.11,0.32,0.93,0.65],'D':[“这个”,“那个”,“如何”,“什么”]}) >>>df A、B、C、D 0110.11本 1 12 0.32 2 3 0.93如何 3240.65什么 >>>df.groupby('A',as_index=False).agg(np.size) A

我尝试使用numpy.size()来计算来自pandas Dataframe groupby()的组的组大小,结果很奇怪

数据帧({'A':[1,1,2,2],'B':[1,2,3,4],'C':[0.11,0.32,0.93,0.65],'D':[“这个”,“那个”,“如何”,“什么”]}) >>>df A、B、C、D 0110.11本 1 12 0.32 2 3 0.93如何 3240.65什么 >>>df.groupby('A',as_index=False).agg(np.size) A、B、C、D 0 1 2 2.0 2 1 2 2 2.0 2 >>>df.groupby('A',as_index=False)['C'].agg(np.size) A C 0 1 8 1 2 8 >>>df.groupby('A',as_index=False)[[C']].agg(np.size) A C 0 1 2.0 1 2 2.0 >>>grouped=df.groupby('A',as_index=False) >>>分组['C','D'].agg(np.size) A C D 0 1 2.0 2 1 2 2.0 2 在代码中,如果在['C']之后使用groupby(),则组大小为8,等于正确的组大小*列数,即2*4;如果我们在列[['C']]或['C','D']后面使用groupby(),则组大小是正确的

为什么?


熊猫似乎首先尝试执行聚合,然后执行实际的列选择

如果您想知道组大小,请使用以下选项之一:

grouped.size()
grouped.agg("size)
len(grouped)

您如何创建
分组
?还有,您期望得到什么?这个输出到底让您困惑了什么?我想这可以归结为
agg
apply
之间的区别。将
指定为_index=False
np.size
组合似乎是个问题。也许只需要使用
.agg('size')
我的预期输出是,我仍然可以得到一个数据帧,其中应该包括列“a”和“C”,列“C”的值是组大小,在这个代码示例中应该是2。顺便说一下,“as_index”的意思是是否使用groupby键作为索引,为什么它与np.size有关?嗨,你能解释一下为什么设置为_index=False会使DataFrameGroupBy对象具有8个元素吗?在这种情况下,元素将是索引列和C列。当你问它的大小,你得到8。这不是我期望熊猫做的。当您在播放中调用多个列(如group['C'、'D']),或者调用group['C'].size()或group.agg(“size”)时,不会发生这种情况。我不清楚这个案子为什么特别。我将从我的答案中去掉那部分。