python - 根据不同数据框的标准将函数应用于数据框列,同时确保没有重复
问题描述
我有两个数据框:
data = [[10],[10],[10],[20],[20],[20],[30],[30],[30]]
df = pd.DataFrame(data, columns=['Number'])
nameList=[['grant',10],['grant',10],['grant',10],['grant',10],['greg',10],['thom',10],['amy',20],['steve',20],['sally',20],['ralph',30],['olive',30],['bobb',30]]
nameDF = pd.DataFrame(nameList, columns=['Name','Number'])
我想根据从 nameDF 中随机选择的名称创建一个新列,条件为 Number=Number。我不想重复。
我尝试创建一个函数并使用 apply 但如果随机选择名称已经在新列中,我无法弄清楚如何再次应用函数。我不确定这是否是解决这个问题的正确方法。请帮忙!
def random_word(num):
numDF = nameDF[nameDF['Number']==num]
return np.random.choice(numDF['Name'],1)
df['New_Name'] = df['Number'].apply(random_word)
解决方案
这对你有用吗?我刚刚在您的代码中添加了 3-4 行。创建了 2 个列表(lst,lst2)并继续将值附加到已经选择的 lst2。在选择随机名称并返回 New_Name 列的值之前,它将检查lst2 中是否不存在该值,以避免最终 df 中的名称重复。
def random_word(num):
numDF = nameDF[nameDF['Number']==num]
global lst
lst = numDF['Name'].tolist()
x = np.random.choice([i for i in lst if i not in lst2],1)[0]
lst2.append(x)
return x
global lst2
lst2 =[]
df['New_Name'] = df['Number'].apply(random_word)
df
推荐阅读
- android - JNI_OnLoad() 中的 GetEnv 出现错误,删除这些行时应用程序崩溃,错误消失
- ios - 如何在 swift 5 中从 viewmodel 调用 ViewController 中的方法?
- python - AttributeError:当模型为“模型”对象时没有属性“可训练变量”
- machine-learning - Sagemaker:每次我需要进行预测时都进行培训:我应该如何构建解决方案?
- firebase - 替代 Crashlytics `+ (CLSStackFrame *)stackFrameWithAddress:(NSUInteger)address`
- python - “元组”对象没有属性“cuda”
- pandas - 每个时间间隔拆分数据帧
- node.js - 树莓 BLE 加密/配对
- android - 用于recyclerView的适配器的Android独立viewModel
- python - 如何通过 pandas 合并或连接两个没有列名的数据集,我使用 right_on 和 left_on 但显示关键错误