Python 3.x 从另一列计算Id的总行数

Python 3.x 从另一列计算Id的总行数,python-3.x,pandas,dataframe,pandas-groupby,Python 3.x,Pandas,Dataframe,Pandas Groupby,我有一个数据帧 初始化列表数据。 data = {'Id':['1', '2', '3', '4','5','6','7','8','9','10'], 'reply_id':[2, 2,2, 5,5,6,8,8,1,1]} 创建数据帧 df = pd.DataFrame(data) Id reply_id 0 1 2 1 2 2 2 3 2 3 4 5 4 5 5 5 6 6 6 7 8 7 8 8 8 9

我有一个数据帧

初始化列表数据。

data = {'Id':['1', '2', '3', '4','5','6','7','8','9','10'], 'reply_id':[2, 2,2, 5,5,6,8,8,1,1]} 
创建数据帧

df = pd.DataFrame(data)

   Id   reply_id
0   1   2
1   2   2
2   3   2
3   4   5
4   5   5
5   6   6
6   7   8
7   8   8
8   9   1
9   10  1
我想在
new
中获得每个
id
reply\u id
总数

Id=1在
reply\u Id
中出现2次,我希望在新列
new

所需输出

    Id  reply_id  new
0   1   2          2   
1   2   2          3     
2   3   2          0 
3   4   5          0
4   5   5          2
5   6   6          1
6   7   8          0
7   8   8          2
8   9   1          0
9   10  1          0
我已经完成了这行代码

df['new'] = df.reply_id.eq(df.Id).astype(int).groupby(df.Id).transform('sum')
在列
reply\u id
上使用,然后使用聚合函数创建映射系列
counts
,最后使用将
id
列中的值与其各自的
计数映射:

counts = df['reply_id'].groupby(df['reply_id']).count()
df['new'] = df['Id'].map(counts).fillna(0).astype(int)
结果:

# print(df)

   Id  reply_id  new
0   1         2    2
1   2         2    3
2   3         2    0
3   4         5    0
4   5         5    2
5   6         6    1
6   7         8    0
7   8         8    2
8   9         1    0
9  10         1    0

在这个回答中,我使用
id
列中的
Series.value\u counts
来计算reply\u id中的值,并将结果转换为dict。然后,我使用
id
列中的
Series.map
将计数与id关联起来。
fillna(0)
用于填充
reply\u id

df['new'] = (df['Id']
             .astype(int)
             .map(df['reply_id'].value_counts().to_dict())
             .fillna(0)
             .astype(int))

我尝试了你的解决方案,因为它与我的非常相似,但是你的解决方案用零填充
new
fill with zero
是什么意思?我的意思是
new
中的所有值都是零。那么,我这边发生了一些奇怪的事情。我使用了问题中提供的精确数据,以及您所写的精确行,但无法从中获得任何信息:(是的,我想是的..bcz,我已经测试了上述解决方案并产生了期望的结果。