python:两列的组合
Posted
技术标签:
【中文标题】python:两列的组合【英文标题】:python: Combination of two Columns 【发布时间】: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 。谢谢
【问题讨论】:
【参考方案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 框架内实现?以上是关于python:两列的组合的主要内容,如果未能解决你的问题,请参考以下文章