【问题标题】:python: Combination of two Columnspython:两列的组合
【发布时间】:2018-06-25 10:27:42
【问题描述】:

我已经使用代码从一个数据框中分离出一列:

 Column_a = df1.loc[:,'Column_a_Name']

和来自另一个数据框的第二列,等效地使用:

 Column_b = df2.loc[:,'Column_b_Name'].

这些列包含名称,我想创建一个列表,其中包含两个名称的所有可能组合。例如:

 Column_a         Column_b
 Adam             Smith
 Barry            Brown
 Ben              Red

我想要达到的结果是一个自然的数据框

 [(Adam,Smith), (Adam, Brown), (Adam,Red), (Barry, Brown),...,(Ben, Red)]

我已经尝试过有用的函数 itertools.combinations (Column_a, Column_b),但这只是返回结果:TypeError: cannot convert the series to 。谢谢

【问题讨论】:

    标签: python dataframe combinations


    【解决方案1】:

    基础 python 中的列表推导在这里效果很好:

    outlist = [ (i, j)
        for i in df.colA
        for j in df.colB ]
    print(outlist)
    

    输出:

    [('Adam', 'Smith'), ('Adam', 'Brown'), ('Adam', 'Red'), ('Barry', 'Smith'), ('Barry', 'Brown'), ('Barry', 'Red'), ('Ben', 'Smith'), ('Ben', 'Brown'), ('Ben', 'Red')]
    

    这可以转换为数据框:

    newdf = pd.DataFrame(data=outlist, columns=['first_col','second_col'])
    print(newdf)
    

    输出:

      first_col second_col
    0      Adam      Smith
    1      Adam      Brown
    2      Adam        Red
    3     Barry      Smith
    4     Barry      Brown
    5     Barry        Red
    6       Ben      Smith
    7       Ben      Brown
    8       Ben        Red
    

    【讨论】:

      【解决方案2】:

      使用 itertools.product

      >>>>df = pd.DataFrame(data=[['Adam', 'Smith'], ['Barry', 'Brown'], ['Ben', 'Red']], columns=['Column_a_Name', 'Column_b_Name'])
      df
      
        Column_a_Name Column_b_Name
      0          Adam         Smith
      1         Barry         Brown
      2           Ben           Red
      
      >>>>from itertools import product
      
      >>>>list(product(df['Column_a_Name'], df['Column_b_Name']))
      
      
       [('Adam', 'Smith'),
       ('Adam', 'Brown'),
       ('Adam', 'Red'),
       ('Barry', 'Smith'),
       ('Barry', 'Brown'),
       ('Barry', 'Red'),
       ('Ben', 'Smith'),
       ('Ben', 'Brown'),
       ('Ben', 'Red')]
      

      注意:product 函数返回一个生成器。如果要循环遍历数据,则不需要列表。

      【讨论】:

      • 如何将集合转换为数据框?
      • combo_df = pd.DataFrame(data=list(product(df['Column_a_Name'], df['Column_b_Name'])), columns=['Column_a_Name','Column_b_Name'])跨度>
      • 请问这是否也可以在不使用 itertools 包的情况下在 pandas 框架内实现?
      猜你喜欢
      • 2017-08-18
      • 1970-01-01
      • 2022-11-03
      • 2014-10-01
      • 2018-11-28
      • 2017-10-26
      • 1970-01-01
      • 2015-02-22
      • 2018-10-21
      相关资源
      最近更新 更多