首页 > 解决方案 > 如何合并 itertools 生成的数据框和熊猫中的普通数据框?

问题描述

itertools使用以下代码生成了一个数据框,其中包含所有可能的两种心电图 (ECG) 导联组合

source = [ 'I-s', 'II-s', 'III-s', 'aVR-s', 'aVL-s', 'aVF-s', 'V1-s', 'V2-s', 'V3-s', 'V4-s', 'V5-s', 'V6-s', 'V1Long-s', 'IILong-s', 'V5Long-s', 'Information-s' ]
target = [ 'I-t', 'II-t', 'III-t', 'aVR-t', 'aVL-t', 'aVF-t', 'V1-t', 'V2-t', 'V3-t', 'V4-t', 'V5-t', 'V6-t', 'V1Long-t', 'IILong-t', 'V5Long-t', 'Information-t' ]

from itertools import product
test = pd.DataFrame(list(product(source, target)), columns=['source', 'target'])

测试数据框包含 256 行/行,包含所有两种可能的组合。

每个组合的值都为零,如下所示

test['value'] = 0

测试 df 如下所示:

测试数据框

我有另一个名为的数据框diagramDF,其中包含value列非零的组合。比数据框diagramDF小得多test

值数据框

source  target  value
0   I-s II-t    137
1   II-s    I-t 3
2   II-s    III-t   81
3   II-s    IILong-t    13
4   II-s    V1-t    21
5   III-s   II-t    3
6   III-s   aVF-t   19
7   IILong-s    II-t    13
8   IILong-s    V1Long-t    353
9   V1-s    aVL-t   11
10  V1Long-s    IILong-t    175
11  V1Long-s    V3-t    4
12  V1Long-s    aVF-t   4
13  V2-s    V3-t    8
14  V3-s    V2-t    6
15  V3-s    V6-t    2
16  V5-s    aVR-t   5
17  V6-s    III-t   4
18  aVF-s   III-t   79
19  aVF-s   V1Long-t    235
20  aVL-s   I-t 1
21  aVL-s   aVF-t   16
22  aVR-s   aVL-t   1

请注意,前两列sourcetarget具有相同的符号

我试图用 usingtest的非零值替换数据帧的零值,如下所示:diagramDFmerge

df = pd.merge(test, diagramDF, how='left', on=['source', 'target'])

但是,我收到一条错误消息,通知我:

ValueError:列标签“源”不是唯一的。对于多索引,标签必须是一个元组,其元素对应于每个级别

有什么我做错了吗?有没有更有效和快速的方法来做到这一点?

标签: pythonpandasdataframemerge

解决方案


可能有帮助,
pd.merge(test, diagramDF, how='left', on=['source', 'target'],right_index=True,left_index=True)


推荐阅读