【问题标题】:Groupby on a column to get its counts while retaining all other columns intact对列进行分组以获取其计数,同时保持所有其他列不变
【发布时间】:2020-11-07 12:57:23
【问题描述】:

请看下面的输入数据框。

df = pd.DataFrame({"Name": ['A','A','B','B','C'], 'Tag':[1,2,3,4,5], 'Field':['X','X','Y','Z','R'] })

  Name  Tag Field
0    A    1     X
1    A    2     X
2    B    3     Y
3    B    4     Z
4    C    5     R

我将“名称”列的计数视为名为“计数”的附加列,同时保留“标签”和“字段”列的值。

预期输出:

  Name  Count  Tag Field
0    A      2    1     X
1    A      2    2     X
2    B      2    3     Y
3    B      2    4     Z
4    C      1    5     R

我的尝试:

我可以通过groupbymerge 及其以下来实现这一点。但是,我猜我过于复杂化并寻找比我更好的解决方案。请帮忙。

df1 = df.groupby("Name")['Tag'].count().reset_index()
df1 = df1.rename(columns={'Tag' : 'Count'})
df1 = df1.merge(df, on='Name', how='left')

【问题讨论】:

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


    【解决方案1】:

    你需要IIUCtransform:

    df["count"] = df.groupby("Name")["Tag"].transform("size")
    
    print (df)
    
      Name  Tag Field  count
    0    A    1     X      2
    1    A    2     X      2
    2    B    3     Y      2
    3    B    4     Z      2
    4    C    5     R      1
    

    【讨论】:

      【解决方案2】:

      你也可以试试

      df['Count'] = df['Name'].apply(lambda x: len(df.loc[df['Name'] == x, :]))
      

      【讨论】:

      • 感谢 Raghav.. 但我正在寻找高效的代码。 “应用”使我的文件很大,因此速度很慢。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多