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:无法将序列转换为
>>>>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']))