【问题标题】:Adding a column to df that contains count of a value of a different column in the df? [duplicate]向 df 添加一列,其中包含 df 中不同列的值的计数? [复制]
【发布时间】:2020-10-23 16:27:51
【问题描述】:

我在下面有一个df:

Day 
Morning
Day
Night 
Night
Day
Morning
Day
Day 

此df中还有其他列,不只包含上列

当我运行以下代码时:

df.groupby('day').count()

它输出一个 df,其中包含 day 列的每个值在 df 的其他列中出现的次数(对于 day 列中的每个值,它的计数相同)

如何创建一个新列来列出 Day 列的每个值的相同计数?

预期输出:

 Day     New_Col
Morning    2
Day        4
Night      2
Night      2
Day        4
Morning    2
Day        4
Day        4

谢谢!

【问题讨论】:

    标签: python python-3.x pandas dataframe pandas-groupby


    【解决方案1】:

    如果要映射回来,请使用transform()

    df['New_Col'] = df.groupby('Day')['Day'].transform('count')
    

    或者你可以使用map,也可以使用value_counts()

    df['New_Col'] = df['Day'].map(df['Day'].value_counts())
    

    输出:

           Day  New_Col
    0  Morning        2
    1      Day        4
    2    Night        2
    3    Night        2
    4      Day        4
    5  Morning        2
    6      Day        4
    7      Day        4
    

    【讨论】:

    • 非常感谢,我试过 df.groupby('day').value_counts() 怎么没用? @Quang Hoang
    • @Chris90 不是 groupby().value_counts() 只是 df['Day'].value_counts()
    • 对,抱歉,添加列的最佳方法是将其映射回 df 是否正确?
    • @Chris90 无论哪种方式都可以。
    【解决方案2】:

    使用df.groupby.transform('size'):

    df['New_Col'] = df.groupby('Day')['Day'].transform('size')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-26
      • 2020-12-13
      • 2022-01-08
      • 1970-01-01
      • 2019-03-12
      • 1970-01-01
      • 2017-03-31
      • 2016-09-03
      相关资源
      最近更新 更多