随着标题的发展,我必须保持行项目的顺序,因此,来自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 :.提前谢谢您,如果我缺少一些非常愚蠢的东西,对不起。
我不确定您要做什么,但我想可能是这样。
# 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