合并不同长度的数据帧

2024-06-16 10:17:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我的第一个数据帧如下所示:

ESD    Species      Key1
Sub       POAP     SubPOAP
Sub       FRAP     SubFRAP
Sand      POAP     SandPOAP
Sand      ACER     SandACER
Sand      SALI     SandSALI

所以Key1是ESD和物种的连接。在

我的第二个数据帧如下所示:

^{pr2}$

所以我想基于Key1Key将第二个框架连接到第一个框架中,但是第一个数据帧比较大,我仍然希望在新的数据帧中保留不匹配的列(使用ESD作为Sand)。最终我也会把任何东西都和沙子混合。在

到目前为止,我使用了这段代码,并将“Key1”和“Key”设置为索引:

merge=pd.merge(df, df2, left_index='True', right_index='True') 

但这不会保留没有匹配键的列。也许我需要的是连接而不是合并吗?在

此代码导致:

 ESD    Species      Key1      Values
 Sub       POAP     SubPOAP     10 
 Sub       FRAP     SubFRAP     20

所需输出为:

ESD    Species      Key1      Values
Sub       POAP     SubPOAP     10 
Sub       FRAP     SubFRAP     20
Sand      POAP     SandPOAP    NaN
Sand      ACER     SandACER    NaN
Sand      SALI     SandSALI    NaN

我不在乎重复的列标题是否会转移到join,我只删除它们(有两个列名为Species)。在


Tags: 数据nanspecieskey1subpoapesdsand
1条回答
网友
1楼 · 发布于 2024-06-16 10:17:44

不是将ESDSpecies串联成一个字符串, 最好在列的列表上合并:

result = pd.merge(df, df2, on=['ESD', 'Species'], how='left')

要在result中为df中的每一行保留一行,请使用how='left'。在


^{pr2}$

收益率

    ESD Species      Key1  Values      Key
0   Sub    POAP   SubPOAP      10  SubPOAP
1   Sub    FRAP   SubFRAP      20  SubFRAP
2  Sand    POAP  SandPOAP     NaN      NaN
3  Sand    ACER  SandACER     NaN      NaN
4  Sand    SALI  SandSALI     NaN      NaN

注意,如果df看起来像这样

ESD    Species      Key1
FOO       BAR      FOOBAR
FOOB      AR       FOOBAR

然后两个不同的(ESD, Species)对可以映射到相同的Key1 i、 e.FOOBAR。因此,为了 合并可能会导致错误。在

这可能会影响你,也可能不会影响你,但因为理论上可能会导致错误,并且 因为您可以直接在['ESD', 'Species']上合并,所以最好避免 串联。在

相关问题 更多 >