如何基于分组计数条件替换Pandas DataFrame指定列的对应值
你原有代码的问题是判断条件返回的是单个布尔值,不是和原DataFrame行数一致的布尔序列,因此无法匹配所有需要替换的行。可以用groupby+transform的方案实现需求:
import pandas as pd df = pd.read_excel('c:/test.xlsx') # 统计每一行所属(col1, col2)分组的总记录数 group_cnt = df.groupby(['col1', 'col2'])['col1'].transform('count') # 筛选分组记录数大于2的行,替换col1值为b df.loc[group_cnt > 2, 'col1'] = 'b'
如果仅需要替换原col1值为a的符合条件分组,可以调整判断条件:
df.loc[(group_cnt > 2) & (df['col1'] == 'a'), 'col1'] = 'b'
原理说明:transform方法会把分组聚合后的结果广播到分组内的每一行,得到和原DataFrame长度完全一致的计数序列,配合loc就可以批量筛选所有符合条件的行完成替换。
内容的提问来源于stack exchange,提问作者bibiji
相关产品推荐
相关产品推荐

