Python pandas:合并两个没有键的表(将 2 个数据帧与广播所有元素相乘;NxN 数据帧)

Posted

技术标签:

【中文标题】Python pandas:合并两个没有键的表(将 2 个数据帧与广播所有元素相乘;NxN 数据帧)【英文标题】:Python pandas : Merge two tables without keys (Multiply 2 dataframes with broadcasting all elements; NxN dataframe) 【发布时间】:2016-05-16 00:17:49 【问题描述】:

我想合并 2 个具有广播关系的数据帧: 没有公共索引,只想找到 2 个数据框中的所有行对。 所以想要制作 N 行数据框 x M 行数据框 = N*M 行数据框。 是否有任何规则可以在不使用 itertool 的情况下实现这一点?

DF1=
  id  quantity  
0  1        20  
1  2        23  

DF2=
      name  part  
    0  'A'   3  
    1  'B'   4  
    2  'C'   5  

DF_merged=
      id  quantity name part 
    0  1        20  'A'  3 
    1  1        20  'B'  4 
    2  1        20  'C'  5 
    3  2        23  'A'  3
    4  2        23  'B'  4
    5  2        23  'C'  5

【问题讨论】:

用简单的cross-join 回答是here 【参考方案1】:

您可以在此列的DataFramesmerge 中使用tmp 填充的辅助列1。最后你可以drop它:

DF1['tmp'] = 1
DF2['tmp'] = 1

print DF1
   id  quantity  tmp
0   1        20    1
1   2        23    1

print DF2
  name  part  tmp
0  'A'     3    1
1  'B'     4    1
2  'C'     5    1

DF = pd.merge(DF1, DF2, on=['tmp'])
print DF
   id  quantity  tmp name  part
0   1        20    1  'A'     3
1   1        20    1  'B'     4
2   1        20    1  'C'     5
3   2        23    1  'A'     3
4   2        23    1  'B'     4
5   2        23    1  'C'     5

print DF.drop('tmp', axis=1)
   id  quantity name  part
0   1        20  'A'     3
1   1        20  'B'     4
2   1        20  'C'     5
3   2        23  'A'     3
4   2        23  'B'     4
5   2        23  'C'     5

【讨论】:

以上是关于Python pandas:合并两个没有键的表(将 2 个数据帧与广播所有元素相乘;NxN 数据帧)的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Python Pandas 合并多个 CSV 文件

17、pandas的merge合并函数

将没有唯一索引的数据帧与 Python 和 Pandas 合并 [重复]

Python实验五:Pandas数据分析及数据预处理

Python实验五:Pandas数据分析及数据预处理

合并两个不同长度的python pandas数据帧,但将所有行保留在输出数据帧中