如何从 pandas 数据框创建多个列组合?
How to create multiple combinations of columns from a pandas dataframe?
我会用图来说明我的问题:
我有一个 pandas 数据框,其中包含 6 种不同类型的 13 列。然后我随机想从每种类型中取一个并创建一个新的 table 来执行后续分析。
所以最后我想创建 (3 choose 1) * 1 * (2 choose 1) * (2 choose 1) * (4 choose 1) * 1 = 48 new dataframes out of one pandas dataframe.
列没有具体的名称,但可以是例如:A1, A2, A3, B1, C1, C2, D1, D2, E1, E2, E3, E4, F1
有人知道如何在 Python 中解决这个问题吗?
如果你能把列名按照类型分成列表,那么你的问题就变成了求这些列表的笛卡尔积的问题。找到笛卡尔积后,您可以对其进行迭代并使用列名组合过滤 DataFrame(其中有 (3 choose 1) * 1 * (2 choose 1) * (2 choose 1) * (4 choose 1) * 1 = 48
)。
A_cols = ['A1','A2','A3']
B_cols = ['B1']
C_cols = ['C1','C2']
D_cols = ['D1','D2']
E_cols = ['E1','E2','E3','E4']
F_cols = ['F1']
# column_combos is length 48
column_combos = pd.MultiIndex.from_product([A_cols,B_cols,C_cols,D_cols,E_cols,F_cols])
# out is a dictionary of 48 DataFrames
out = {';'.join(cols): df[[*cols]] for cols in column_combos}
我会用图来说明我的问题:
我有一个 pandas 数据框,其中包含 6 种不同类型的 13 列。然后我随机想从每种类型中取一个并创建一个新的 table 来执行后续分析。 所以最后我想创建 (3 choose 1) * 1 * (2 choose 1) * (2 choose 1) * (4 choose 1) * 1 = 48 new dataframes out of one pandas dataframe.
列没有具体的名称,但可以是例如:A1, A2, A3, B1, C1, C2, D1, D2, E1, E2, E3, E4, F1
有人知道如何在 Python 中解决这个问题吗?
如果你能把列名按照类型分成列表,那么你的问题就变成了求这些列表的笛卡尔积的问题。找到笛卡尔积后,您可以对其进行迭代并使用列名组合过滤 DataFrame(其中有 (3 choose 1) * 1 * (2 choose 1) * (2 choose 1) * (4 choose 1) * 1 = 48
)。
A_cols = ['A1','A2','A3']
B_cols = ['B1']
C_cols = ['C1','C2']
D_cols = ['D1','D2']
E_cols = ['E1','E2','E3','E4']
F_cols = ['F1']
# column_combos is length 48
column_combos = pd.MultiIndex.from_product([A_cols,B_cols,C_cols,D_cols,E_cols,F_cols])
# out is a dictionary of 48 DataFrames
out = {';'.join(cols): df[[*cols]] for cols in column_combos}