对列进行Groupby以获得计数,同时保留所有其他列不变

时间:2020-11-07 12:57:23

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

请查看下面的输入数据框。

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')

2 个答案:

答案 0 :(得分:1)

IIUC,您需要transform

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

答案 1 :(得分:0)

您也可以尝试

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