Pandas 组合两个独立的数据帧形成矩阵
我想结合两个熊猫数据帧生成一个矩阵。这两个数据帧不共享一个共同的索引值,实际上是独立的。相反,我想使用这两组索引来生成一个新的数据帧,使用层次索引,它具有这两个索引的所有可能组合。列应采用原始数据帧中的值 下面是我想要组合的两个数据帧的简化版本:Pandas 组合两个独立的数据帧形成矩阵,pandas,dataframe,matrix,Pandas,Dataframe,Matrix,我想结合两个熊猫数据帧生成一个矩阵。这两个数据帧不共享一个共同的索引值,实际上是独立的。相反,我想使用这两组索引来生成一个新的数据帧,使用层次索引,它具有这两个索引的所有可能组合。列应采用原始数据帧中的值 下面是我想要组合的两个数据帧的简化版本: df1 Cat Freq 1.1 A 4 1.2 B 8 1.3 C 2 1.4 A 5 df2 Cat Freq 2.1 A 4 2.2 C 4 2.3
df1
Cat Freq
1.1 A 4
1.2 B 8
1.3 C 2
1.4 A 5
df2
Cat Freq
2.1 A 4
2.2 C 4
2.3 C 2
2.4 A 7
这就是我想要创造的:
df_merged
Cat(1) Freq(1) Cat(2) Freq(2)
1.1 2.1 A 4 A 4
2.2 A 4 C 4
2.3 A 4 C 2
2.4 A 4 A 7
1.2 2.1 B 8 A 4
2.2 B 8 C 4
2.3 B 8 C 2
.. ... .... ....... ....... .......
.. ... .... ........ ....... .......
最后,我希望在具有最大频率的列的基础上创建一个具有类别字母(源自df1或df2)的新列。有了这个,我将能够形成一个矩阵。如果我能得到上面表格中的数据,我认为这最后一步将非常简单
非常感谢 由数据帧和多索引创建的数据帧使用,最后使用:
或使用交叉连接,以避免丢失索引值:
df = (df1.reset_index().assign(A=1)
.merge(df2.reset_index().assign(A=1), on='A', suffixes=('(1)','(2)'))
.set_index(['index(1)','index(2)'])
.drop('A', axis=1)
.rename_axis((None,None)))
print (df)
Cat(1) Freq(1) Cat(2) Freq(2)
1.1 2.1 A 4 A 4
2.2 A 4 C 4
2.3 A 4 C 2
2.4 A 4 A 7
1.2 2.1 B 8 A 4
2.2 B 8 C 4
2.3 B 8 C 2
2.4 B 8 A 7
1.3 2.1 C 2 A 4
2.2 C 2 C 4
2.3 C 2 C 2
2.4 C 2 A 7
1.4 2.1 A 5 A 4
2.2 A 5 C 4
2.3 A 5 C 2
2.4 A 5 A 7
@Liamt123你吃了欢迎!如果我的答案有用,别忘了-点击复选标记(✓答案旁边的代码>),将其从灰显切换为填充。谢谢
df = (df1.reset_index().assign(A=1)
.merge(df2.reset_index().assign(A=1), on='A', suffixes=('(1)','(2)'))
.set_index(['index(1)','index(2)'])
.drop('A', axis=1)
.rename_axis((None,None)))
print (df)
Cat(1) Freq(1) Cat(2) Freq(2)
1.1 2.1 A 4 A 4
2.2 A 4 C 4
2.3 A 4 C 2
2.4 A 4 A 7
1.2 2.1 B 8 A 4
2.2 B 8 C 4
2.3 B 8 C 2
2.4 B 8 A 7
1.3 2.1 C 2 A 4
2.2 C 2 C 4
2.3 C 2 C 2
2.4 C 2 A 7
1.4 2.1 A 5 A 4
2.2 A 5 C 4
2.3 A 5 C 2
2.4 A 5 A 7