名为df
的数据帧如下所示。
import pandas as pd
df = pd.DataFrame({'id': [1, 1, 3]})
Input:
id
0 1
1 1
2 3
我想计算每个id
的数量,并将结果作为新列count
。
Expected:
id count
0 1 2
1 1 2
2 3 1
答案 0 :(得分:4)
pd.factorize
和np.bincount
我的最爱。 factorize
不排序,时间复杂度为O(n)
。对于大数据集,factorize
胜过np.unique
i, u = df.id.factorize()
df.assign(Count=np.bincount(i)[i])
id Count
0 1 2
1 1 2
2 3 1
np.unique
和np.bincount
u, i = np.unique(df.id, return_inverse=True)
df.assign(Count=np.bincount(i)[i])
id Count
0 1 2
1 1 2
2 3 1
答案 1 :(得分:3)
通过在count
上进行分组,然后在transforming与value_counts
(或size
)进行分组的情况下,将新的id
列分配给数据框。
>>> f.assign(count=f.groupby('id')['id'].transform('value_counts'))
id count
0 1 2
1 1 2
2 3 1
答案 2 :(得分:3)
将Series.map
与Series.value_counts
一起使用:
df['count'] = df['id'].map(df['id'].value_counts())
#alternative
#from collections import Counter
#df['count'] = df['id'].map(Counter(df['id']))
详细信息:
print (df['id'].value_counts())
1 2
3 1
Name: id, dtype: int64
或者用GroupBy.transform
返回Series
,其大小与原始DataFrame
相同,并返回GroupBy.size
:
df['count'] = df.groupby('id')['id'].transform('size')
print (df)
id count
0 1 2
1 1 2
2 3 1