将循环中两个不同数据帧的值复制到更大的数据帧

问题描述 投票:0回答:1

我有 3 个数据框。我将尝试在下面创建 3 个虚拟的,因为我必须提供一个最低限度的工作示例。实际上,数据帧是从大文件中读取的。

t1=['2024-08-05-12-11-14','2024-08-05-12-11-14.3','2024-08-05-12-11-14.6','2024-08-05-12-11-14.9','2024-08-05-12-11-15.2','2024-08-05-12-11-15.5','2024-08-05-12-11-15.8','2024-08-05-12-11-16.1','2024-08-05-12-11-16.4','2024-08-05-12-11-16.7','2024-08-05-12-11-17','2024-08-05-12-11-17.3','2024-08-05-12-11-17.6','2024-08-05-12-11-17.9','2024-08-05-12-11-18.2']

t2=['2024-08-05-12-11-14.3','2024-08-05-12-11-14.6','2024-08-05-12-11-15.5','2024-08-05-12-11-15.8','2024-08-05-12-11-16.1','2024-08-05-12-11-16.4','2024-08-05-12-11-17','2024-08-05-12-11-17.3','2024-08-05-12-11-17.6','2024-08-05-12-11-17.9']

t3=['2024-08-05-12-11-14','2024-08-05-12-11-14.9','2024-08-05-12-11-15.2','2024-08-05-12-11-16.7','2024-08-05-12-11-18.2']

chanAdata=[]
chanBdata=[]
chanAdata1=[0,1,0,0,0,0,1,1,0,0]
chanBdata1=[0,0,1,0,1]

数据框:

df1=pd.Dataframe({'Timestamp':t1,'A':chanAdata,'B',chanBdata})
df2=pd.Dataframe({'Timestamp':t2,'A':chanAdata1})
df3=pd.Dataframe({'Timestamp':t3,'B',chanBdata1})

这些是高度简化的示例。 df1 有 200000 行和 134 列。 df2 有 150000 行和 5 列。 df3 有 50000 行和 5 列。我只显示了需要执行操作的列。此外,df1 中的时间戳列是 df2 和 df3 中时间戳列的并集。我没有显示其他数据框。事实上,除了 df2 和 df3 之外,我还有 21 个,而且我正在循环读取它们。

我的目标 - 根据时间戳将数据从 df2 和 df3 移动到 df1 中。

我尝试与 left 方法进行合并,以循环执行此操作。问题:我最终在 df1 中得到奇怪的列,例如 chanAdata、chanAdata_x、chanABdata_y。

如何按照上述方式复制数据?

python pandas merge
1个回答
0
投票

通过将空的

chanAdata
chanBdata
列添加到 df1,会导致列名称冲突,其中两个数据帧具有相同名称的列,但这些列不存在于连接条件中。在这种情况下,Pandas 通过向数据帧中重复的列名附加后缀来自动处理列名冲突。默认情况下,它将
_x
附加到左侧数据帧的列,将
_y
附加到右侧数据帧的列。您还可以指定在这种情况下使用什么后缀,如下所示:

pd.merge(df1, df2, on='key', suffixes=('_left', '_right'))

但是,在您的情况下,根据逻辑,

df1
首先不需要空列
A
B
,删除它们可以解决您的问题。合并之前您可以尝试以下操作:

df1=pd.Dataframe({'Timestamp':t1)
df2=pd.Dataframe({'Timestamp':t2,'A':chanAdata1})
df3=pd.Dataframe({'Timestamp':t3,'B':chanBdata1})
© www.soinside.com 2019 - 2024. All rights reserved.