Pandas 在DataFrame上创建新列,其中的条目是从另一列中随机选择的条目
我有一个具有以下结构的数据帧Pandas 在DataFrame上创建新列,其中的条目是从另一列中随机选择的条目,pandas,pandas-groupby,Pandas,Pandas Groupby,我有一个具有以下结构的数据帧 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',
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
我想按租户id分组并创建一个新列,该列是从用户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可以重复,因为租户_id=2重复“fvg”。我想要一个不超过十个id的阈值。这个数据只是一个样本,一开始只有10个id,所以通常任何数字都比用户id的总数小得多。这种情况下,比属于租户的总用户id少1个
我首先试着弄清楚如何选择不同长度的随机子集
样品
new_column = df.user_id.sample(n=np.random.randint(1, 10)))
在这之后,我有点不知所措,将它分配给Nan中的df结果,可能是因为它们的长度可变。请帮忙。
谢谢 根据我的评论:
“新列”不是新列,而是单行的新单元格
如果要将结果指定给新列,则需要创建一个新列,并对其应用单元计算
df['new column'] = df['user_id'].apply(lambda x: df.user_id.sample(n=np.random.randint(1, 10))))
应用程序使用哪一列其实并不重要,因为变量未在计算中使用。
fvg
在talent\u id=2
上重复。这是预期的吗?你提到过,抽样是在没有替换的情况下完成的。我的坏id可以为租户重复。“未替换”条件错误。您的“新列”不是新列,而是单行的新单元格。如果要将结果分配给一个新列,则需要创建一个新列,并对其应用单元格计算df['new column']=df['user\u id'].apply(lambda x:df.user\u id.sample(n=np.random.randint(1,10))
apply使用哪一列其实并不重要,因为在计算中没有使用变量ahhh!对MrE是正确的。谢谢