如何创建一个包含行与列匹配的和积的新数据框?

How to create a new data frame containing the sum-product of matching rows to columns?

我有两个包含两种信息的数据框。第一个是物种偶然性 table 的站点,其中包含特定站点的特定物种计数:

> sp
        Sp 1     Sp 2    Sp 3
Site 1    1        2       1
Site 2    0        0       1
Site 3    3        0       0

第二个是相同物种的数据框,但有一个二进制变量指示该物种是否具有特定属性:

> tr
        Tr 1    Tr 2    Tr 3
Sp 1      1      0        0
Sp 2      0      1        0
Sp 3      0      1        1

所需的输出是一个包含站点的新数据框,以及二元特征变量的和乘积 * 该特定站点的物种频率,如下所示:

> fu
         Tr 1    Tr 2    Tr 3
Site 1     1       3       1
Site 2     0       1       1
Site 3     3       0       0

如有任何帮助,我们将不胜感激!我已经坚持了几天了。

我尝试了一些东西,包括 pandas 中的 .mul 函数;然而,在多个属性之间匹配物种名称并生成总和已被证明是困难的。

这是重新创建上述数据的代码:

sp = pd.DataFrame({"SiteCode": ["Site 1", "Site 2", "Site 3"],
                   "Sp1": [1, 0, 3],
                   "Sp2": [2, 0, 0],
                   "Sp3": [1, 1, 0]})

print(sp)

tr = pd.DataFrame({"SpeciesCode": ["Sp1", "Sp2", "Sp3"],
                   "T1": [1, 0, 0],
                   "T2": [0, 1, 1],
                   "T3": [0, 0, 1]})

print(tr)

好的,让我们使用 set_indexdot:

sp1 = sp.set_index('SiteCode')

tr1 = tr.set_index('SpeciesCode')

sp1.dot(tr1)

输出:

          T1  T2  T3
SiteCode            
Site 1     1   3   1
Site 2     0   1   1
Site 3     3   0   0