我如何尝试使用数据框的所有可能的组合,但要维护Python中行项目的顺序?

问题描述 投票:-1回答:1

随着标题的发展,我必须保持行项目的顺序,因此,来自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 :.提前谢谢您,如果我缺少一些非常愚蠢的东西,对不起。

python python-3.x dataframe combinations itertools
1个回答
0
投票

我不确定您要做什么,但我想可能是这样。

# 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输出:

    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
© www.soinside.com 2019 - 2024. All rights reserved.