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

2024-04-26 22:02:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我对groupby结果使用.size()来计算每组中有多少项。

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

谢谢

这就是我尝试过的:

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

我得到的错误是:

TypeError: 'DataFrameGroupBy' object does not support item assignment (on the second line)


Tags: 编辑supportdfsizeobject错误not情况
3条回答

你需要^{}^{}-lendf和以前一样:

注意:

这里需要在groupby之后添加一列,否则会出现错误。因为^{}countNaNs也是,所以使用什么列并不重要。所有列工作相同。

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-lendf中设置列名,则显然与之前不同:

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

df.groupby(...)的结果不是数据帧。若要返回数据帧,必须对每个组应用函数、转换组的每个元素或筛选组。

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

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

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

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

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

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

相关问题 更多 >