我有一个具有以下结构的DataFrame。
df = pd.DataFrame({'tenant_id': [1,1,1,2,2,2,3,3,7,7], 'user_id': ['ab1', 'avc1', 'bc2', 'iuyt', 'fvg', 'fbh', 'bcv', 'bcb', 'yth', 'ytn'],
'text':['apple', 'ball', 'card', 'toy', 'sleep', 'happy', 'sad', 'be', 'u', 'pop']})
这给出了以下输出:
df = df[['tenant_id', 'user_id', 'text']]
tenant_id user_id text
1 ab1 apple
1 avc1 ball
1 bc2 card
2 iuyt toy
2 fvg sleep
2 fbh happy
3 bcv sad
3 bcb be
7 yth u
7 ytn pop
我想在tenant_id上进行分组并创建一个新列,该列是user_id列中随机选择的字符串。
因此,我希望我的输出看起来如下:
tenant_id user_id text new_column
1 ab1 apple [ab1, bc2]
1 avc1 ball [ab1]
1 bc2 card [avc1]
2 iuyt toy [fvg, fbh]
2 fvg sleep [fbh]
2 fbh happy [fvg]
3 bcv sad [bcb]
3 bcb be [bcv]
7 yth u [pop]
7 ytn pop [u]
此处,已经选择了user_id列中的随机ID,这些id可以重复为" fvg"对tenant_id = 2重复。我想要一个不超过10个id的门槛。这个数据只是一个示例,只有10个id开头,所以通常任何数字远小于user_id的总数。这种情况说比属于租户的总user_id少1。
我首先尝试弄清楚如何选择不同长度的随机子集 df.sample
new_column = df.user_id.sample(n=np.random.randint(1, 10)))
在此之后我有点迷失,把它分配给我的df结果Nan,可能是因为它们的长度可变。请帮忙。 谢谢。
答案 0 :(得分:0)
根据我的评论:
您的新专栏'不是新专栏,它是单行的新单元格。
如果要将结果分配给新列,则需要创建新列,并将单元格计算应用于该列。
df['new column'] = df['user_id'].apply(lambda x: df.user_id.sample(n=np.random.randint(1, 10))))
由于变量未在计算中使用,因此用于应用的列并不重要