Groupby并通过在Pandas中随机分配多个字符串来创建一个新列
Posted
技术标签:
【中文标题】Groupby并通过在Pandas中随机分配多个字符串来创建一个新列【英文标题】:Groupby and create a new column by randomly assign multiple strings into it in Pandas 【发布时间】:2020-08-30 23:51:09 【问题描述】:假设我有学生信息id
、age
和class
,如下所示:
id age class
0 1 23 a
1 2 24 a
2 3 25 b
3 4 22 b
4 5 16 c
5 6 16 d
我想通过class
分组并通过随机分配math, art, business, science
来创建一个名为major
的新列,这意味着对于同一类,主要字符串是相同的。
我们可能需要使用apply(lambda x: random.choice..)
来实现这一点,但我不知道该怎么做。谢谢你的帮助。
预期输出:
id age major class
0 1 23 art a
1 2 24 art a
2 3 25 science b
3 4 22 science b
4 5 16 business c
5 6 16 math d
【问题讨论】:
是的,抱歉,我还没有找到这个。 【参考方案1】:使用numpy.random.choice
和DataFrame
长度的值数:
df['major'] = np.random.choice(['math', 'art', 'business', 'science'], size=len(df))
print (df)
id age major
0 1 23 business
1 2 24 art
2 3 25 science
3 4 22 math
4 5 16 science
5 6 16 business
编辑:对于每个组的相同主要值,请使用 Series.map
和字典:
c = df['class'].unique()
vals = np.random.choice(['math', 'art', 'business', 'science'], size=len(c))
df['major'] = df['class'].map(dict(zip(c, vals)))
print (df)
id age class major
0 1 23 a business
1 2 24 a business
2 3 25 b art
3 4 22 b art
4 5 16 c science
5 6 16 d math
【讨论】:
谢谢,我已经修改了我的问题,请您重新看一下好吗?以上是关于Groupby并通过在Pandas中随机分配多个字符串来创建一个新列的主要内容,如果未能解决你的问题,请参考以下文章
基于pandas groupby拆分dataframe并生成多个PDF