在pandas DataFrame上创建新列,其中条目是从另一列

时间:2018-06-04 20:23:12

标签: pandas pandas-groupby

我有一个具有以下结构的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,可能是因为它们的长度可变。请帮忙。 谢谢。

1 个答案:

答案 0 :(得分:0)

根据我的评论:

您的新专栏'不是新专栏,它是单行的新单元格。

如果要将结果分配给新列,则需要创建新列,并将单元格计算应用于该列。

df['new column'] = df['user_id'].apply(lambda x: df.user_id.sample(n=np.random.randint(1, 10)))) 

由于变量未在计算中使用,因此用于应用的列并不重要