0

我有两个包含两种信息的数据框。第一个是按物种列联表的站点,其中包含特定站点中特定物种的计数:

> 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)
4

1 回答 1

2

好的,让我们使用set_indexand dot

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
于 2019-08-07T18:19:19.140 回答