Pandas groupby() 和 agg() 方法在列上的混淆
之间的区别吗
df[['column1', 'column2']].groupby('column1').agg(['mean', 'count'])
我可以检查一下和
df[['column1', 'column2']].groupby('column1').agg({'column2': 'mean', 'column2': 'count'})
?在第一个示例中,mean
和 count
是在 column2
上执行的,而 column2
不在 groupby 中
。
在第二个示例中,逻辑相同,但我在 agg
中明确提到了 column2
。
为什么我没有看到两者相同的结果?
Can I check what is the difference between
df[['column1', 'column2']].groupby('column1').agg(['mean', 'count'])
and
df[['column1', 'column2']].groupby('column1').agg({'column2': 'mean', 'column2': 'count'})
In the first example, mean
and count
is performed on column2
which is not in groupby
.
In the second example, same logic but I had explicitly mentioned column2
in agg
.
Why do I not see the same result for both?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
TLDR
第二条语句的问题是由于覆盖列造成的。
至少可以通过三种方式来执行此语句。
首先让我们构建一个测试数据集:
相同
语句 1:与您的第一个 wy输出
:具有多索引列标题大小和 level=1 两个聚合的数据框。
语句 2:在字典中使用“size”的聚合列表
输出(与上面相同)
语句 3:使用 命名聚合
输出:
这给出了一个带有您自己命名的“扁平”列标题的数据框,但是名称不得包含空格或特殊字符。
不正确方法是您的第二种方法
输出:
这里发生的情况是,您获得两列,每个聚合各一列,但列标题的“大小”相同,因此在这种情况下,第一次迭代将被第二次“计数”覆盖。
TLDR
The problem with the second statement has to due with overwriting the column.
There are at least three ways to do this statement.
First let's build a test dataset:
Statement 1: Same as your first wy
Output:
A dataframe with a multiindex column header size and level=1 both aggregations.
Statement 2: Using a list of aggregrations for 'size' in a dictionary
Output (same as above)
Statement 3: Using named aggregrations
Output:
This give a dataframe with a 'flatten' column header that you name yourself, however that name must not contain a space or special characters.
The incorrect way is your second method
Outputs:
What is happening here is that you are getting two columns one for each aggregations but the column header is the same 'size', therefore the first iteration is getting overwritten with the second 'count' in this case.