我试图通过使用布尔数组作为键来理解groupby,下面是测试代码
a = pd.DataFrame([[True,False,False],[False,True,False]], columns=['A','B','C'])
print(a)
A B C
0 True False False
1 False True False
然后我尝试了不同的布尔数组组合,这似乎groupby结果都是相同的
b=a.groupby([False,False])
b.apply(pd.DataFrame)
A B C
0 True False False
1 False True False
c=a.groupby([True,False])
c.apply(pd.DataFrame)
A B C
0 True False False
1 False True False
d=a.groupby([False,True])
d.apply(pd.DataFrame)
A B C
0 True False False
1 False True False
e=a.groupby([False,True])
e.apply(pd.DataFrame)
A B C
0 True False False
1 False True False
让我们把它分解一下
.groubpy().apply(pd.DataFrame)
正如您在所有变体中使用的那样,从每个组中获取行并创建一个数据帧,该数据帧基本上返回self
,因此输出看起来是一样的,但熊猫在每种情况下获取的方式都不同b=a.groupby([False,False])
:两行属于同一组(组idFalse
),并且一起解析一次以形成相同的dfc=a.groupby([True,False])
:有两个组,每个组有一行。Apply接受每个组并构建两个独立的数据帧(每个组一个)。然后连接并重新排列与原始df相同的dfd=a.groupby([False,True])
:与#2相同,但现在第一行属于False
组。如果聚合或应用了不同的函数(pandas.DataFrame除外),您将看到以True, False
作为索引的df(默认情况下,groupby排序),第1行将显示为第一行,因为它属于组True
这是因为您传递的分组参数无法将数据帧分割为所需的部分。因此,它只需复制整个数据帧,并将其“压缩”到正在传递的分组数组中。例如——
注意,使用分组数组[False,True],它只需将整个数据帧压缩到每个数组中。如果您通过了可以在轴1中找到的东西,那么它将考虑该系列中的项目来对数据集进行分组。p>
另一种方法是,分组参数需要是一个具有名称的序列,并且该名称应该在数据框的列中找到。如果您传递一个数组[True,False],它基本上被解释为一个无名序列,因此无法获取其键来进行拆分
如果您想了解groupby的工作原理,请遵循以下几点:
拆分发生在提供的键上,该键需要在索引/列中可引用,否则它无法拆分,只返回每个组的未拆分数据帧。第一步是石斑鱼要做的,下一步是简单的应用和组合步骤。在上面看到的元组(打印输出)中,apply函数对每个元组的
t[1]
元素进行操作,然后将其与每个元组的t[0]
元素组合并垂直连接相关问题 更多 >
编程相关推荐