python:两列的组合

时间:2018-01-16 16:36:14

标签: python dataframe combinations

我使用代码

从一个数据框中隔离了一列
 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:无法将系列转换为<键入' int'取代。感谢

2 个答案:

答案 0 :(得分: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函数返回一个生成器。如果您想循环数据,则不需要列表。

答案 1 :(得分: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')]

这可以转换为dataframe:

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