如何从单个 pandas 列创建值的所有组合?

How to create all combination of values from a single pandas column?

我有一个名为 df 的 table,它有两列 - 名称和数据。 table 如下

我正在尝试从数据列创建所有可能的值组合,并将结果作为单独的列连接到现有 table。基本上,在随后的每一列中,其中两个名称的值为 2 和 1.5,其余名称的值为 1。我正在寻找类似于以下 table:

的输出

虽然我已经能够使用以下代码找出将在下一列中取值为 2 和 1.5 的名称组合

for index in list(combinations(df[['Name']].index,2)):
    print(df[['Name']].loc[index,:])
    print('\n')

但是,我一直卡在如何创建上面提到的新列上。非常感谢任何帮助。

我认为您正在寻找排列,而不是组合。在这种情况下,我们可以生成这些并转置数据。转置后我们可以重命名列。

import pandas as pd
from itertools import permutations
df = pd.DataFrame({'Name':['A','B','C','D'],
                  'Data':[1,2,1,1.5]})

df = pd.DataFrame(list(permutations(df.Data.values,4)), columns=df.Name.values).T
df.columns = [f'Data{x+1}' for x in df.columns]

df.reset_index(inplace=True)
df.rename(columns={'index':'Name'}, inplace=True)

或者:

pd.DataFrame(list(permutations(df.Data.values,4)), columns=df.Name.values).T.add_prefix('Data').rename_axis('Name').reset_index()

输出

  Name  Data1  Data2  Data3  Data4  Data5  Data6  Data7  Data8  Data9  ...  \
0    A    1.0    1.0    1.0    1.0    1.0    1.0    2.0    2.0    2.0  ...   
1    B    2.0    2.0    1.0    1.0    1.5    1.5    1.0    1.0    1.0  ...   
2    C    1.0    1.5    2.0    1.5    2.0    1.0    1.0    1.5    1.0  ...   
3    D    1.5    1.0    1.5    2.0    1.0    2.0    1.5    1.0    1.5  ...