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:两列的组合的主要内容,如果未能解决你的问题,请参考以下文章

在 Postgresql 中,对两列的组合强制唯一

基于sql中的第三列返回两列的所有组合

SQL - 从单列到两列的所有日期组合

外键可以引用具有复合(即两列的组合)键的表吗?

如何设置具有两列的组合框的值?

在excel中查找两列的组合,一列中有一个条件