【问题标题】:Add a new column to a dataframe which is the result of a groupby count向数据框中添加一个新列,该列是 groupby 计数的结果
【发布时间】:2019-08-13 13:28:20
【问题描述】:

我正在尝试获取作者所写书籍的总数,并将其放在一个名为 book number 的列中,而我的数据框有 15 个其他列。

我在网上查了一下,人们使用带有 count() 的 groupby,但是它并没有创建我想要的列,它只给出了一列没有名称的数字,我不能将它与原始数据框放在一起。

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

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    对 groupby 使用 transform 并将其分配回去:

    df_author['Book Number']=df_author.groupby("Name")['Name'].transform('count')
    

    对于新的 df,请使用:

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

    【讨论】:

    • 好一个@anky_91 +1
    【解决方案2】:

    使用reset_index()

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

    这基本上告诉熊猫 groupby 重置回原始索引

    【讨论】:

      【解决方案3】:

      您已经完成了出色的工作,除了您需要检查如何将值填充或分配回您拥有的新列中,您可以使用 DataFrame.assign 方法来实现工作相当优雅。

      直接来自文档:

      1. 将新列分配给 DataFrame。

      2. 返回一个新对象,其中包含除新列之外的所有原始列。重新分配的现有列将被覆盖。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-10-10
        • 2020-03-22
        • 2017-04-27
        • 2018-12-29
        • 2018-10-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多