如何计算列中的元素并将结果作为新列?

时间:2018-09-19 05:45:10

标签: python pandas dataframe

名为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

3 个答案:

答案 0 :(得分:4)

pd.factorizenp.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.uniquenp.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上进行分组,然后在transformingvalue_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.mapSeries.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