Pandas DataFrame按条件将年龄区间替换为对应范围随机整数的问题
问题原因
你原来的代码里random.randint(35, 44)只会执行一次,生成单个随机整数,pandas会把这个单值广播到所有匹配AGE == '35-44'的行,所以所有匹配行都被赋了同一个值。
解决方法
方法1:仅处理35-44单个指定区间(匹配你给出的预期效果)
如果只需要替换35-44这一类区间,保留其他区间原值,可以生成和匹配行数相等的随机数列表再赋值:
import random import pandas as pd # 统计匹配35-44的行数,生成对应数量的独立随机数 match_num = len(df[df["AGE"] == '35-44']) df.loc[df["AGE"] == '35-44', 'AGE'] = [random.randint(35, 44) for _ in range(match_num)]
方法2:自动处理所有区间格式的AGE值
如果需要把20-34、45-70等所有区间值都替换成对应区间的随机整数,用自定义函数+apply的方式可以自动适配所有区间:
import random import pandas as pd def age_range_to_random(age_str): low, high = map(int, age_str.split('-')) return random.randint(low, high) df['AGE'] = df['AGE'].apply(age_range_to_random)
内容的提问来源于stack exchange,提问作者postcolonialist
相关产品推荐
相关产品推荐

