Python Groupby在保留所有其他列不变的情况下获取列的计数

Python Groupby在保留所有其他列不变的情况下获取列的计数,python,python-3.x,pandas,dataframe,pandas-groupby,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”列的计数视为一个名

请看下面的输入数据框

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”的附加列,同时在tact中保留“Tag”和“Field”列的值

预期产出:

  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
我的尝试:

我可以通过
groupby
merge
及其下方来实现这一点。然而,我猜我把这件事复杂化了,并在寻找比我更好的解决方案。请帮忙

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

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

IIUC您需要
转换

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

谢谢拉加夫。。但我正在寻找高效的代码。“应用”使我的速度变慢,因为它是一个大文件。