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