Python 获取dataframe中列的计数值,并将剩余行设置为1

Python 获取dataframe中列的计数值,并将剩余行设置为1,python,dataframe,count,Python,Dataframe,Count,我有一个occ为空的数据帧: ID occ a a b a b c 现在,我想制作另一列,该列将计算发生次数,并仅显示第一行的计数,其余应保持为“1”: 预期结果 ID occ a 3 a 1 b 2 a 1 b 1 c 1 这里“a”是3倍,“b”是2倍,“c”是1倍。 a和b的所有其他行显示为1 我是通过以下方式获得计数的: df['ID'].value_counts() 但当我尝试使用以下命令将其放入数据帧时,它会抛出一个错误: df['occ']=df['Value']

我有一个occ为空的数据帧:

ID occ
a
a
b
a
b
c
现在,我想制作另一列,该列将计算发生次数,并仅显示第一行的计数,其余应保持为“1”:

预期结果

ID occ
a  3
a  1
b  2
a  1
b  1
c  1
这里“a”是3倍,“b”是2倍,“c”是1倍。 a和b的所有其他行显示为1

我是通过以下方式获得计数的:

df['ID'].value_counts()
但当我尝试使用以下命令将其放入数据帧时,它会抛出一个错误:

df['occ']=df['Value'].value_counts()
TypeError:不可损坏的类型:“列表”


创建
occ
列时,将值1指定为初始值,然后可以使用
pd.DataFrame.duplicated
传递参数
keep='first'
为第一次出现的值创建屏蔽,并指定计数:

df['occ']=1
df.loc[~df.duplicated(keep='first'),'occ']=df['ID'].value_counts().value
输出

ID-occ
0 a 3
1 a 1
2 b 2
3 a 1
4 b 1
5 c 1

PS:如果
ID
列中第一次出现的值不是排序形式,则在该场景中可能会失败,您可能希望使用
df.sort\u值对
ID
列进行排序(by=['ID'],inplace=True,ignore\u index=True)
,或者您可以通过比较
ID
列中的值来有选择地分配计数

我得到的是occ值,但对于100行,它只返回96行。1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],数据类型=int64)这4个元素仅在开始行时递增,但在剩余行中不加1。
2,2,2
每次计数
2
因此这4个元素相当于8个元素,因此
value\u counts
似乎工作正常,只需按照我在回答中提到的操作,它工作正常我知道,但它应该将所有其他值保持为1,我是否应该删除(keep='first')?您是否尝试过分配
df.loc[~df.duplicated(keep='first'),'occ']=df['ID'].value_counts().values
类似的值?我遇到了以下错误:ValueError:在设置iteable时必须具有相等的len键和值