给DataFrame添加一列,该列是groupby计数的结果。

3
我试图获取一个作者写的书籍总数,并将其放入名为“book number”的列中,我的数据框还有其他15个列。
我在网上查过,人们使用groupby和count(),但它并没有创建我想要的列,它只给出一个没有名称的数字列,我无法与原始数据框合并。
author_count_df = (df_author["Name"]).groupby(df_author["Name"]).count()

print(author_count_df)

结果:

Name
A  D                3
A  Gill             4
A  GOO              3
ALL  SHOT          10
AMIT  PATEL         5
                   ..
vishal  raina       7
walt  walter        6
waqas  alhafidh     3
yogesh  koshal      8
zainab  m.jawad     9
Name: Name, Length: 696, dtype: int64

期望结果:一个包含以下内容的数据框

Name          other 14 columns from author_df   Book Number
A  D                    ...                         3
A  Gill                 ...                         4
A  GOO                  ...                         3
ALL  SHOT               ...                         10
AMIT  PATEL             ...                         5
                        ...                         ..
vishal  raina           ...                         7
walt  walter            ...                         6
waqas  alhafidh         ...                         3
yogesh  koshal          ...                         8
zainab  m.jawad         ...                         9
3个回答

3
使用transform与groupby结合,并将其赋值回去:
df_author['Book Number']=df_author.groupby("Name")['Name'].transform('count')

创建一个新的数据框,使用以下命令:

author_count_df = df_author.assign(BookNum=df_author.groupby("Name")['Name']
                                                        .transform('count'))

0

使用reset_index()

author_count_df = (df_author["Name"]).groupby(df_author["Name"]).count().reset_index()

这基本上告诉pandas groupby将重置回原始索引


0

你做得很好,除了需要检查如何将值填充或分配回你已经得到的新列中,你可以使用DataFrame.assign方法来优雅地完成这个任务。

直接从文档中获取:

  1. 给DataFrame分配新的列。

  2. 返回一个包含所有原始列以及新列的新对象。重新分配的现有列将被覆盖。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接