【问题标题】:How to create all combination of values from a single pandas column?如何从单个熊猫列创建所有值组合?
【发布时间】:2021-11-18 21:15:44
【问题描述】:

我有一个名为 df 的表,其中包含两列 - 名称和数据。表如下

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

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

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

但是,我坚持如何创建如上所述的新列。非常感谢您对此提供任何帮助。

【问题讨论】:

    标签: python pandas dataframe combinations


    【解决方案1】:

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

    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  ...  
    

    【讨论】:

    • 感谢您的回复。这在一定程度上起到了作用,但它为我生成了重复的列。理想情况下,应该有 12 列,就像我在问题中给出的那样,但这给了我 24 列,每列重复。关于如何处理的任何想法?
    • 排列这 4 个项目有 24 种可能的方式,而不是 12 种。排列不会产生重复。
    • 谢谢,我能够找出重复的问题。您的解决方案非常有帮助:)
    猜你喜欢
    • 1970-01-01
    • 2017-10-03
    • 2020-03-02
    • 2017-01-25
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 2017-08-26
    相关资源
    最近更新 更多