python:两列的组合

python:两列的组合,python,dataframe,combinations,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

我使用以下代码从一个数据帧中隔离了一列:

 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.combines(Column_a,Column_b),但这只是返回结果:TypeError:无法将序列转换为。感谢使用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')]

注意:乘积函数返回一个生成器。如果要循环处理数据,则不需要列表。

基本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')]
  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
这可以转换为数据帧:

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

[('Adam', 'Smith'), ('Adam', 'Brown'), ('Adam', 'Red'), ('Barry', 'Smith'), ('Barry', 'Brown'), ('Barry', 'Red'), ('Ben', 'Smith'), ('Ben', 'Brown'), ('Ben', 'Red')]
  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

如何将一个集合转换为数据帧呢?combo_df=pd.dataframe(数据=列表(产品(df['Column\u a\u Name'],df['Column\u b\u Name']),Column=['Column\u a\u Name','Column\u b\u Name']))