如何为Pandas DataFrame新增列统计指定列及组合列的数值出现次数
解决方案
你可以直接使用Pandas的groupby+transform组合实现需求,该方法是Pandas底层C优化的实现,700万行数据通常几分钟内就能完成运算,效率远高于手写循环。transform会将分组统计结果广播到分组内的所有行,返回的序列长度和原DataFrame完全一致,可直接赋值为新列,具体代码如下:
# 可选优化:若0、1列重复值较多,先转为category类型可大幅提升运算速度、降低内存占用 df[0] = df[0].astype('category') df[1] = df[1].astype('category') # 列5:下位词(0列)出现次数 df[5] = df.groupby(0)[0].transform('count') # 列6:上位词(1列)出现次数 df[6] = df.groupby(1)[1].transform('count') # 列7:(0,1)值对出现次数 df[7] = df.groupby([0,1])[0].transform('count')
原方案失效原因说明
你之前使用value_counts得到的是去重后的统计结果,长度为去重后键的数量,远小于原DataFrame的行数,二者索引无法对齐,因此直接赋值会失败。而transform返回的序列和原DataFrame行顺序、长度完全匹配,不需要额外对齐操作。
内容的提问来源于stack exchange,提问作者user10059606
相关产品推荐
相关产品推荐

