pandas 数据框重复值计数无法正常工作

pandas dataframe duplicate values count not properly working

值计数为:df['ID'].value_counts().values -----> 数组([4,3,3,1], dtype=int64)

输入:

ID emp
a  1
a  1
b  1
a  1
b  1
c  1
c  1
a  1
b  1
c  1
d  1

当我弄乱 ID 列时

df.loc[~df.duplicated(keep='first', subset=['ID']), 'emp']= df['ID'].value_counts().values

输出:

ID emp 
a  4
c  3
d  3
c  1
b  1
a  1
c  1
a  1
b  1
b  1
a  1

预期结果:

ID emp 
a  4
c  3
d  1
c  1
b  3
a  1
c  1
a  1
b  1
b  1
a  1

问题:计数在分配 emp 之前未检查 ID。

仅此一项就可以为给定的示例数据帧提供 df.loc[~df.duplicated(keep='first', subset=['ID']), 'emp']= df['ID'].value_counts().values 所需的输出

但你可以试试:

cond=~df.duplicated(keep='first', subset=['ID'])

df.loc[cond,'emp']=df.loc[cond,'ID'].map(df['ID'].value_counts())

这里是 df['ID'].value_counts() 的问题输出是 Series 与原始数据不同数量的计数值,对于由 couter 值填充的新列使用 Series.map:

df.loc[~df.duplicated(subset=['ID']), 'emp'] = df['ID'].map(df['ID'].value_counts())

GroupBy.transformsize:

df.loc[~df.duplicated(subset=['ID']), 'emp'] = df.groupby('ID')['ID'].transform('size')

具有 4 个值的输出系列无法分配回去,因为 df1.indexdf['ID'].value_counts().index

中的索引不同
print (df['ID'].value_counts())
a    4
b    3
c    3
d    1
Name: ID, dtype: int64

如果转换为numpy数组只分配前4个值,因为在这个DataFrame中有4组a,b,c,d,所以df.duplicated(subset=['ID'])返回了4次Trues,但是为了4,3,3,1 输出错误的原因:

print (df['ID'].value_counts().values)
[4 3 3 1]

需要什么 - 具有相同 df.index:

的新列 (Series)
print (df['ID'].map(df['ID'].value_counts()))
0     4
1     4
2     3
3     4
4     3
5     3
6     3
7     4
8     3
9     3
10    1
Name: ID, dtype: int64

print (df.groupby('ID')['ID'].transform('size'))
0     4
1     4
2     3
3     4
4     3
5     3
6     3
7     4
8     3
9     3
10    1
Name: ID, dtype: int64