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是正确的。谢谢