Создайте новый столбец в панде DataFrame, в котором записи являются случайно выбранными записями из другого столбца. - PullRequest
0 голосов
/ 04 июня 2018

У меня есть 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, эти идентификаторы могут повторяться, так как "fvg"повторяется для tenant_id = 2.Я хотел бы иметь порог не более десяти идентификаторов.Эти данные являются всего лишь примером и имеют только 10 идентификаторов, поэтому обычно любое число намного меньше общего числа user_id.В этом случае говорят, что на 1 меньше, чем user_id, которые принадлежат арендатору.

Сначала я попытался выяснить, как выбрать случайное подмножество переменной длины с помощью df.sample

    new_column = df.user_id.sample(n=np.random.randint(1, 10)))

После этого я немного растерялся, присваивая его своим результатам df в Nan, вероятно, потому чтоони имеют переменную длину.Пожалуйста помоги.Благодарю.

1 Ответ

0 голосов
/ 05 июня 2018

за мой комментарий:

Ваш «новый столбец» - это не новый столбец, это новая ячейка для отдельной строки.

Если вы хотите присвоить результат новому столбцу, вам нужно создать новый столбец и применить к нему вычисление ячейки.

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

не имеет значения, какой столбец вы используете для применения, так как переменная не используется в вычислениях

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...