如何基于DataFrame另一列的唯一值生成随机数列
解决方法
你原来的代码问题在于,transform里传入的pd.Series([np.random.randint(1,5)])无法正确为每个组生成并广播唯一的随机数。以下两种方法可以实现需求:
方法一:创建映射字典(直观易懂)
先给每个唯一的Creator分配随机数,再映射回原DataFrame:
import numpy as np import pandas as pd # 生成唯一Creator到随机数的映射 rank_mapping = {creator: np.random.randint(1, 5) for creator in df['Creator'].unique()} # 映射生成新列 df['Cust Rank'] = df['Creator'].map(rank_mapping)
方法二:使用groupby.transform(更简洁)
利用transform对每个组生成一次随机数,并自动广播到组内所有行:
df['Cust Rank'] = df.groupby('Creator')['Creator'].transform(lambda _: np.random.randint(1, 5))
效果验证
用示例DataFrame测试:
df = pd.DataFrame({'Creator': ['A', 'A', 'B', 'C', 'C']}) # 运行上述任意一种方法后,输出如下(随机数会变化,但同一Creator值相同):
| Creator | Cust Rank |
|---|---|
| A | 1 |
| A | 1 |
| B | 3 |
| C | 2 |
| C | 2 |
内容的提问来源于stack exchange,提问作者Rahul Bhat
相关产品推荐
相关产品推荐

