pandas使用groupby(col).nunique()赋值新列返回NaN原因求解
问题原因
你遇到的NaN问题是索引对齐规则导致的:df.groupby('chain_id').chain_event_id.nunique() 返回的是一个Series,它的索引是分组键chain_id的去重值(也就是[511, 666]),而你原始DataFrame的索引是[0,1,2,3],两者索引完全不匹配。pandas在给列赋值时会自动按索引对齐,找不到匹配索引的位置就会填充NaN。
正确实现方式
要让分组统计结果和原df的行一一对应,需要用transform方法,它会把分组聚合后的结果广播到组内的每一行,保持和原DataFrame完全一致的索引:
df['events_in_chain'] = df.groupby('chain_id')['chain_event_id'].transform('nunique')
运行验证
执行上述代码后打印df的结果如下:
chain_id chain_event_id events_in_chain 0 511 1 2 1 511 2 2 2 511 1 2 3 666 1 1
完全符合预期的统计结果。
内容的提问来源于stack exchange,提问作者goidelg
相关产品推荐
相关产品推荐

