Как я могу попробовать все возможные комбинации кадра данных, но с поддержкой порядка элементов строки, в Python? - PullRequest
0 голосов
/ 21 апреля 2020

Как следует из заголовка, я должен поддерживать порядок элементов строк, поэтому что-то вроде «комбинаций» из itertools на самом деле не помогает

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

Из этого:

     MON       TUE         WED         THU   ...
0   bread    chocolate    wine     chocolate ...
1   pizza    bread        bread    chocolate ...
2   bread    pizza        bread    apple     ...
3   wine     bread        apple    wine      ...

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

     MON       TUE         WED         THU    FRI      SAT        SUN   ...
0   bread     NaN         chocolate   NaN     NaN      wine       NaN   ...
1   NaN       pizza       bread       bread   NaN      chocolate  NaN   ...
2   bread     NaN         pizza       bread   NaN      NaN        apple ...  
3   NaN       NaN         wine        bread   apple    wine       NaN   ...

Итак, в этом примере выходных данных были вставлены пробелы между элементами строки, скорее всего, с "for" или чем-то, что пробует различное количество пробелов между ними, но это то, что я ищу, просто не могу понять правильный алгоритм.

Любая помощь? D:. Заранее спасибо и извините, если я пропустил что-то очень глупое: C.

1 Ответ

1 голос
/ 21 апреля 2020

Я не уверен, что понимаю, что вы собираетесь делать, но я думаю, что это может быть так.

# setup mock dataframe
meals_df = pd.DataFrame([
    {"MON": "bread", "TUE": "chocolate", "WED": "wine", "THU": "chocolate"},
    {"MON": "pizza", "TUE": "bread", "WED": "bread", "THU": "chocolate"},
    {"MON": "bread", "TUE": "pizza", "WED": "apple", "THU": "apple"},
    {"MON": "wine", "TUE": "bread", "WED": "apple", "THU": "wine"}
])

days = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']

menus = list()

for ix, *meal_list in meals_df.itertuples():

    for days_combo in itertools.combinations(days, 4):
        menu = dict(zip(days_combo, meal_list))
        menus.append(menu)

df = pd.DataFrame(menus)

df output:

    Sun Mon Tue Wed Thu Fri Sat
0   bread   chocolate   wine    chocolate   NaN NaN NaN
1   bread   chocolate   wine    NaN chocolate   NaN NaN
2   bread   chocolate   wine    NaN NaN chocolate   NaN
3   bread   chocolate   wine    NaN NaN NaN chocolate
4   bread   chocolate   NaN wine    chocolate   NaN NaN
... ... ... ... ... ... ... ...
135 NaN NaN wine    bread   apple   wine    NaN
136 NaN NaN wine    bread   apple   NaN wine
137 NaN NaN wine    bread   NaN apple   wine
138 NaN NaN wine    NaN bread   apple   wine
139 NaN NaN NaN wine    bread   apple   wine
140 rows × 7 columns
...