【问题标题】:Creating all possible combinations of rows in dataframe in python在python中创建数据框中所有可能的行组合
【发布时间】:2020-02-02 10:46:59
【问题描述】:

我有一个如下数据集:

   Survived  PassengerId  Pclass  
    1.0          1.0       1.0
    20.0        179.0      1.5
    39.0        357.0      2.0
    58.0        535.0      2.5
    77.0        713.0      NaN
    96.0         NaN       NaN
    NaN          NaN       NaN
    NaN          NaN       NaN
    NaN          NaN       NaN
    NaN          NaN       NaN

我想创建这些行的所有可能组合。类似的东西:

   Survived  PassengerId  Pclass  
    1.0          1.0       1.0
    1.0          1.0       1.5
    1.0          1.0       2.0
    1.0          1.0       2.5
    20.0        179.0      1.0
    20.0        179.0      1.5
    20.0        179.0      2.0
    20.0        179.0      2.5
      .           .         .  
      .           .         .
      .           .         .
    1.0         713.0      2.5
    20.0        713.0      2.5
    39.0        713.0      2.5
    58.0        713.0      2.5
    77.0        713.0      2.5
    96.0        713.0      2.5

由于每列有 6、5 和 4 个唯一观测值,因此新数据框将有 6*5*4 = 120 行。
R 中有一个类似的函数叫做 expand.grid 然而,在 python 中需要它。 有没有人用 Python 编写过类似的函数?谢谢你。

【问题讨论】:

    标签: python function dataframe combinations


    【解决方案1】:

    您可以使用库 Pandas 来做到这一点;

    from itertools import product
    import pandas as pd
    
    Survived = [1.0, 20.0, 39.0, 58.0, 77.0, 96.0]
    PassengerId = [1.0, 179.0, 357.0, 535.0, 713.0]
    Pclass = [1.0, 1.5, 2.0, 2.5]
    
    result = pd.DataFrame(product(Survived, PassengerId, Pclass), columns=['Survived', 'PassengerId', 'Pclass'])
    

    一旦你得到变量result,你应该得到一个长度为120的数据帧;

    >>> len(result) # this prints the length of the dataframe
    120
    >>> result.head() # this shows the first 5 records
       Survived  PassengerId  Pclass
    0       1.0          1.0     1.0
    1       1.0          1.0     1.5
    2       1.0          1.0     2.0
    3       1.0          1.0     2.5
    4       1.0        179.0     1.0
    

    【讨论】:

    • 这在一定程度上回答了我的问题。我面临的问题是这些列需要是动态的,因此,我有这个代码:keys_all = tuple(generated_var_dict.keys()) values_all = tuple(generated_var_dict.values()) from itertools import product result = pd. DataFrame(product(values_all), columns=keys_all) 但是,它为 values_all 给出了这个错误: AssertionError: 28 columns passed, passed data has 1 columns
    • 你可以试试下面的result = pd.DataFrame(product(*values_all), columns=keys_all)values_all之前要加撇号(*)
    • 嗨@SarveshSingh,如果我的回答对您的问题有帮助,请帮我接受答案,谢谢。如果您仍然有问题,请告诉我。我看看能不能回答。
    猜你喜欢
    • 2021-02-17
    • 2018-11-29
    • 2017-09-06
    • 1970-01-01
    • 2021-07-20
    • 2018-08-08
    • 1970-01-01
    相关资源
    最近更新 更多