首页 > 解决方案 > Pandas - 具有重复值的列的外部连接

问题描述

这是我关于 Stack Overflow 的第一个问题,如果我的问题不清楚,请告诉我如何帮助您。

目标:使用 Python 和 Pandas 外连接(或合并)包含不同实验试验的数据集,其中每个试验的“x”轴非常相似,但有一些偏差。最重要的是,“x”轴增加、达到最大值然后减小,通常与先前存在的“x”点重叠。

问题:当我去加入/合并“x”上的数据集时,“x”列被排序,弄乱了收集数据的顺序,无法正确绘制它。

这是我正在尝试做的一个小例子:

不让我添加图片,因为我是新人。这是生成这些示例数据集的代码。

数据集:

示例 - 试验 1 数据

示例 - 试验 2 数据

进口:

import numpy as np
import pandas as pd
import random as rand

代码 :

T1 = {'x':np.array([1,1.5,2,2.5,3,3.5,4,5,2,1]),'y':np.array([10000,8500,7400,6450,5670,5100,4600,4500,8400,9000]),'z':np.array(rand.sample(range(0,10000),10))}'

T2 = {'x':np.array([1,2,3,4,5,6,7,2,1.5,1]),'y':np.array([10500,7700,5500,4560,4300,3900,3800,5400,8400,8800]),'z':np.array(rand.sample(range(0,10000),10))}
Trial1 = pd.DataFrame(T1)
Trial2 = pd.DataFrame(T2)

尝试合并/加入:

WomboCombo  = Trial1.join(Trial2,how='outer',lsuffix=1,rsuffix=2, on='x')
WomboCombo2 = pd.merge(left=Trial1, right= Trial2, how = 'outer', left

尝试分成两部分,增加和减少部分(手动找到数据“x”开始减少的行号):

Trial1Inc = Trial1[0:8]
Trial2Inc = Trial2[0:7]

结果 - 合并效果很好,加入“x”列的混乱,不知道为什么:

Trial1Inc.merge(Trial2Inc,on='x',how='outer', suffixes=[1,2])

递增部分合并结果

Trial1Inc.join(Trial2Inc,on='x',how='outer', lsuffix=1,rsuffix=2)

递增部分加入结果 希望我的例子很清楚,试验 1 中的“x”列增加到 5,然后减少回 0。在试验 2 中,我稍微改变了测试,因为我注意到我需要稍高的数据“ x”值。试验 2 增加至 7,然后迅速减少回 0。

我的最终目标是根据相应的 x 值绘制所有 y 值(试验之间存在重叠的地方)的平均值。

如果有重叠,我可以添加误差线。Pandas 对于我想要做的事情几乎是完美的,因为外连接在没有重叠的地方添加了空值,并且能够在有重叠时水平连接两个试验。

现在剩下的就是弄清楚如何加入“x”列,但要保持其值递增然后递减的顺序。首先增加“x”然后减少它对我来说很重要的原因是,当查看“y”值时,似乎给定“x”处的初始“y”值大于“y” " x" 减小时的值(EG 在试验 1 中 x=1,y=10000,然而,在试验后期,当我们回到 x=1,y=9000 时,这种趋势很重要。当 Pandas 对合并之前的列,而不是有一条干净的曲线显示“y”随着“x”的增加而减少,然后相反,在数据连接的任何点都有垂直向下的跳跃。

我真的很感激任何帮助:

A)一个完美的解决方案,当“x”包含重复项时,让我加入“x”

B)一种将数据集拆分为增加“x”和减少“x”的有效方法,以便我可以分别合并每个试验的增加和减少部分,然后垂直连接它们。

希望我在解释我想解决的问题方面做得很好。如果我能澄清任何事情,请告诉我,

谢谢您的帮助!

标签: pythonpandasnumpydataframeouter-join

解决方案


一种可能的解决方案是给您试用行特定的 ID,然后在这些 ID 上合并。应该保持 x 值不被排序。


推荐阅读