首页 > 解决方案 > 根据另一列的编码和均匀分布创建新列

问题描述

我正在尝试向现有数据框添加一列。

假设我有这个数据框:

list_colors = [['black'], ["yellow"]]*4
df_colors = pd.DataFrame(List_colors, columns = ['color'])

它给出了下表:

颜色
黑色的
黄色
黑色的
黄色
黑色的
黄色
黑色的
黄色

color_2我想要的是基于该列随机但等量的值分配给另一列 ( ) color

例如,“黑色”可以分配给“红色”或“绿色”。我希望每次分配都会改变,所以随机,但“红色”和“绿色”的数量应该相同(在这种情况下,2 个“红色”和 2 个“绿色”)。与“黄色”相同,但颜色不同(例如,“紫色”和“粉红色”)。

所以像:

颜色 颜色_2
黑色的 绿色
黄色 紫色的
黑色的 红色的
黄色 粉色的
黑色的 红色的
黄色 粉色的
黑色的 绿色
黄色 紫色的

我怎样才能做到这一点?

标签: python-3.xpandasdataframe

解决方案


您可以设置一个dict包含从源颜色到可能目标颜色列表的映射,然后将每个目标颜色映射到以下适当列表中的随机值dict

replacements = {
    'black': ['red', 'green'],
    'yellow': ['pink', 'purple'],
}
df['color_2'] = df['color'].transform(lambda x: np.random.choice(replacements[x]))

推荐阅读