解决方案
使用
pd.get_dummies和
pd.Dataframe.dot
df2.dot(pd.get_dummies(df1.stack()).T).sum(1, level=0) H1 H2 H3item-000 AA AT TTitem-111 CC CC GC
说明
我知道我想使用点积。矩阵相乘的规则是,将
n x k矩阵乘以
k x m矩阵会得到一个
n x m矩阵。查看最终结果,我
['item-000','item-111']在索引中看到了,这就是我
n的
n x k矩阵。我看一下我的初步数据帧,
['item-000','item-111']在列或索引中是否有一个?我做!
df2Alpha Bravo Charlie Deltaitem-000 A A T Titem-111 C C G C
那暗示我
k是
['Alpha', 'Bravo', 'Charlie', 'Delta']。好的,所以现在我必须寻找
k xm。我仅有的其他数据框是
df1,看起来像的东西
['Alpha', 'Bravo', 'Charlie', 'Delta']在值中……
而不是 列或索引中。所以我必须到那里。我决定堆叠
df1使用
pd.get_dummies。
pd.get_dummies(df1.stack())Alpha Bravo Charlie DeltaH1 FIRST 1 0 0 0 SECOND 0 1 0 0H2 FIRST 1 0 0 0 SECOND 0 0 0 1H3 FIRST 0 0 1 0 SECOND 0 0 0 1
现在我
['Alpha', 'Bravo', 'Charlie', 'Delta']在专栏中!那是我的
k。但我在索引中需要它。没问题,请使用移调。
pd.get_dummies(df1.stack()).TH1H2H3 FIRST SECOND FIRST SECOND FIRST SEConDAlpha 1 0 1 0 0 0Bravo 0 1 0 0 0 0Charlie 0 0 0 0 1 0Delta 0 0 0 1 0 1
对!现在我准备好了
dot
df2.dot(pd.get_dummies(df1.stack()).T) H1H2H3 FIRST SECOND FIRST SECOND FIRST SECONDitem-000 A A A T T Titem-111 C C C C G C
我们就快到了。我进行连接,
FIRST并
SECOND使用
pd.Dataframe.sum指定的位置进行汇总,并按列对象的第一级分组。
df2.dot(pd.get_dummies(df1.stack()).T).sum(1, level=0) H1 H2 H3item-000 AA AT TTitem-111 CC CC GC
设定
df1 = pd.Dataframe(dict( FIRST=['Alpha', 'Alpha', 'Charlie'], SECOND=['Bravo', 'Delta', 'Delta']), ['H1', 'H2', 'H3'])df2 = pd.Dataframe(dict( Alpha=['A', 'C'], Bravo=['A', 'C'], Delta=['T', 'C'], Charlie=['T', 'G']), ['item-000', 'item-111'])



