如何从字典随机选条目生成pandas DataFrame列且排除指定值?
高效实现方案
针对大数据量场景,推荐使用全向量化运算实现,完全避免Python层面的逐行遍历,性能远高于apply等逐行操作方案。
代码示例
import pandas as pd import numpy as np # 提前定义城市列表和索引映射 cities = list(city.keys()) city_to_idx = {c:i for i,c in enumerate(cities)} city_count = len(cities) # 1. 将现有CITY列转为对应数值索引 original_idx = df["CITY"].map(city_to_idx).to_numpy() # 2. 生成1~city_count-1范围内的随机偏移量,保证运算后索引和原值不同 offset = np.random.randint(low=1, high=city_count, size=len(df)) # 3. 计算新索引并映射回城市名 new_idx = (original_idx + offset) % city_count df["CITY2"] = np.take(cities, new_idx)
方案说明
- 核心逻辑:通过给原有城市索引叠加一个
[1, 城市总数-1]范围内的随机偏移,再对城市总数取模,保证得到的新索引一定不等于原有索引,对应城市自然满足和同一行CITY取值不同的要求 - 性能优势:所有运算均调用numpy底层向量化实现,无Python级循环,千万行级数据也可在秒级完成运算
- 兼容所有城市数量≥2的场景,和DataFrame长度无关
内容的提问来源于stack exchange,提问作者ABC
相关产品推荐
相关产品推荐

