Создание всех возможных комбинаций строк в кадре данных в python - PullRequest
0 голосов
/ 02 февраля 2020

У меня есть набор данных, подобный следующему:

   Survived  PassengerId  Pclass  
    1.0          1.0       1.0
    20.0        179.0      1.5
    39.0        357.0      2.0
    58.0        535.0      2.5
    77.0        713.0      NaN
    96.0         NaN       NaN
    NaN          NaN       NaN
    NaN          NaN       NaN
    NaN          NaN       NaN
    NaN          NaN       NaN

И я хочу создать все возможные комбинации этих строк. Что-то вроде:

   Survived  PassengerId  Pclass  
    1.0          1.0       1.0
    1.0          1.0       1.5
    1.0          1.0       2.0
    1.0          1.0       2.5
    20.0        179.0      1.0
    20.0        179.0      1.5
    20.0        179.0      2.0
    20.0        179.0      2.5
      .           .         .  
      .           .         .
      .           .         .
    1.0         713.0      2.5
    20.0        713.0      2.5
    39.0        713.0      2.5
    58.0        713.0      2.5
    77.0        713.0      2.5
    96.0        713.0      2.5

Поскольку в каждом столбце содержится 6, 5 и 4 уникальных наблюдения, поэтому новый фрейм данных будет иметь 6 * 5 * 4 = 120 строк.
В R есть аналогичная функция однако он называется expand.grid, он нужен только в python. У кого-нибудь есть подобная функция, написанная в Python? Спасибо.

1 Ответ

0 голосов
/ 02 февраля 2020

Вы можете сделать это, используя библиотеку Pandas;

from itertools import product
import pandas as pd

Survived = [1.0, 20.0, 39.0, 58.0, 77.0, 96.0]
PassengerId = [1.0, 179.0, 357.0, 535.0, 713.0]
Pclass = [1.0, 1.5, 2.0, 2.5]

result = pd.DataFrame(product(Survived, PassengerId, Pclass), columns=['Survived', 'PassengerId', 'Pclass'])

Получив переменную result, вы должны получить кадр данных длиной 120;

>>> len(result) # this prints the length of the dataframe
120
>>> result.head() # this shows the first 5 records
   Survived  PassengerId  Pclass
0       1.0          1.0     1.0
1       1.0          1.0     1.5
2       1.0          1.0     2.0
3       1.0          1.0     2.5
4       1.0        179.0     1.0
...