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,我已经测试了上述解决方案并产生了期望的结果。