pandas groupby 结果使用布尔数组的不同组合作为键

我试图使用布尔数组作为键来理解 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 结果都是相同的 r


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


回首忆惘然
浏览 99回答 2
2回答

拉风的咖菲猫

这是因为您传递的分组参数无法将数据帧切成所需的部分。所以它只是复制整个数据框并将其“压缩”到您传递的分组数组中。一个例子 -a = pd.DataFrame([[True,False,False],[False,True,False]], columns=['A','B','C'])c = a.groupby([True,False])print('length of grouper object:',len(c))print(' ')print(list(c)[0])print(' ')print(list(c)[1])length of grouper object: 2 (False,        A     B      C1  False  True  False) (True,       A      B      C0  True  False  False)请注意,使用分组数组 [False, True],它只是将整个数据帧 a 与每个压缩在一起。如果您改为传递它可以在轴 1 中找到的内容,它将考虑将该系列中的项目用于对数据集进行分组。另一种看待它的方法是,分组参数需要是一个带有名称的系列,并且该名称应该在数据框的列中找到。如果你传递一个数组 [True, False],它基本上被解释为一个无名系列,因此无法获得它的键来进行拆分。如果你想了解 groupby 的工作原理,下面是一个很好的图像 -拆分发生在提供的键上,并且该键需要在索引/列中可引用,否则它无法拆分并简单地返回每个组的未拆分数据帧。第一步是石斑鱼所做的,接下来是应用和组合步骤,这些步骤很简单。在您上面看到的元组(打印输出)中,apply 函数对t[1]每个元组的元素进行操作,然后将其与t[0]每个元组的元素组合并垂直连接。

慕森王

让我们分解一下.groubpy().apply(pd.DataFrame)正如您在所有变体中使用的那样,从每个组中获取行并创建一个数据框,该数据框基本上返回self,因此输出看起来相同,但 pandas 到达那里的方式在每种情况下都不同b=a.groupby([False,False]):两行属于同一个组(group_id False),一起解析一次形成相同的dfc=a.groupby([True,False]):有两组,每组一行。Apply 获取每个组并构建两个单独的 DataFrame(每个组一个)。然后连接并返回与原始相同的 dfd=a.groupby([False,True]): 与 #2 相同,但现在第一行属于 group False。如果您聚合或应用了不同的函数(pandas.DataFrame 除外),您会看到 df 作为True, False索引(默认情况下按 groupby 排序)并且第 1 行将显示为第一行,因为它属于组True
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python