当前位置: 首页 > 知识库问答 >
问题:

如何为size()列指定名称?

闻鹤龄
2023-03-14

我使用. size()在一个Groupby结果上,以便计算每个组中有多少项。

我希望在不手动编辑列名数组的情况下将结果保存到新列名,如何实现?

这就是我尝试过的:

grpd = df.groupby(['A','B'])
grpd['size'] = grpd.size()
grpd

我得到的错误是:

TypeError:“DataFrameGroupBy”对象不支持项分配(在第二行)

共有3个答案

董翰池
2023-03-14

df.groupby(…)的结果不是数据帧。要恢复数据帧,必须对每个组应用一个函数,转换组中的每个元素,或过滤组。

似乎您需要一个包含(1)df中所有原始数据和(2)每个组中有多少数据的DataFrame。这些东西有不同的长度,所以如果它们需要进入同一个数据帧,您需要冗余地列出大小,即每个组中的每一行。

df['size'] = df.groupby(['A','B']).transform(np.size)

(旁白:如果您可以显示简洁的示例输入和预期结果,这将是很有帮助的。)

甄云
2023-03-14

您需要变换大小-lendf与之前相同:

通知:

这里需要在groupby之后添加一列,否则会出现错误。因为GroupBy.sizecountNaNs,所以所使用的列并不重要。所有列的工作方式相同。

import pandas as pd

df = pd.DataFrame({'A': ['x', 'x', 'x','y','y']
                , 'B': ['a', 'c', 'c','b','b']})
print (df)
   A  B
0  x  a
1  x  c
2  x  c
3  y  b
4  y  b

df['size'] = df.groupby(['A', 'B'])['A'].transform('size')
print (df)
   A  B  size
0  x  a     1
1  x  c     2
2  x  c     2
3  y  b     2
4  y  b     2

如果需要在聚合df-len中设置列名,则df显然与以前不同:

import pandas as pd

df = pd.DataFrame({'A': ['x', 'x', 'x','y','y']
                , 'B': ['a', 'c', 'c','b','b']})
print (df)
   A  B
0  x  a
1  x  c
2  x  c
3  y  b
4  y  b

df = df.groupby(['A', 'B']).size().reset_index(name='Size')
print (df)
   A  B  Size
0  x  a     1
1  x  c     2
2  y  b     2
丁茂
2023-03-14

DataFrameGroupBy对象的.size()内置方法实际上返回一个具有组大小的Series对象,而不是DataFrame。如果需要一个列为组大小、按组编制索引、具有自定义名称的数据帧,可以使用.to_frame()方法并使用所需的列名作为参数。

grpd = df.groupby(['A','B']).size().to_frame('size')

如果您希望组再次成为列,您可以在末尾添加一个.reset_index()

 类似资料:
  • 问题内容: 我在groupby结果上使用,以便计算每个组中有多少个项目。 我希望将结果保存到新的列名中,而无需手动编辑列名数组,怎么办? 这是我尝试过的: 和我得到的错误: TypeError:“ DataFrameGroupBy”对象不支持项目分配(在第二行) 问题答案: 的结果不是DataFrame。要取回DataFrame,必须对每个组应用一个函数,变换组中的每个元素,或过滤组。 似乎您想要

  • 问题内容: 对于我的应用程序,我试图使用java.security.Signature类对一些字节内容进行签名。我遇到的问题是签名永远不会以固定的长度生成。例如,有时会以135、136或137个字节的长度生成它。有没有一种方法可以指定长度或在末尾添加一些填充?任何其他想法或意见,表示赞赏。 问题答案: 对于ECDSA, Java加密使用由X9.62,SEC1和rfc 3279 sec 2.2.3

  • 问题内容: 我正在处理SQL Reporting Services报表(在VS.Net 2005中),该报表在矩阵中显示不同数据的数量。这些列对特定集合中的客户数量进行计数。因此,我有几个类似的列:“ 1个雇主”,“ 2-9个雇主”,“ 10-19个雇主”等等。 我的问题是SQL Reporting Services按字母顺序对矩阵中的列进行排序。因此,我最终在“ 1个雇主”列之后但在“ 2-9”

  • 我试图在ejb-jar.xml中配置EJB2.1MDB。我的问题是没有明确的方法来指定MDB要侦听的目标(队列名)。我穷尽了网络,没有找到任何有用的信息。

  • 像这样: 我该怎么办?

  • 我有一个数组列表,它有3个字段(id、description、typeid),我将该数组列表绑定到ASP DropDownList。在绑定期间,我将description字段设置为DataTextField,并将另一个字段“Id”设置为DataValueField。 代码: 当用户从DropDownList中选择值时,我需要typeid值也需要设置为variable。 有人能告诉我,当我选择特定的