我使用代码
从一个数据框中隔离了一列 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'取代。感谢
答案 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