合并2个数据帧,这些数据帧具有一些公共的和不同的列名称。产生新的列名称,它们既不在列中,又在每个列中合并了名称字符串。
2个数据帧:
df.columns除其他外还有“粒子”,“框架”,“ x旧”,“ y旧” Correct_traj.columns具有“粒子”,“框架”,“ x”,“ y”
数据框都不具有“ frame_x”或“ frame_y”。
但是,当我尝试合并时,最终没有名为“ frame”的列,而是2个新列“ frame_x”和“ frame_y”
尽管两个数据帧索引都链接到帧号,但当前都未命名。我一直在尝试避免在索引和列号具有相同名称的情况下发生错误。因此,一些代码试图删除索引名称等。不确定是否包括索引名称。
数据帧是由trackpy的函数生成的,但我认为问题与pd.merge有关。
总体目标是从粒子的运动中减去某些粒子的平均漂移。我想将旧的x和y移至“ x old”和“ y old”,并将校正后的值放入“ x”和“ y”
drift = tp.motion.compute_drift(df)
corrected_traj = tp.motion.subtract_drift(df[['frame','x','y','particle']].copy(), drift)
df['x old'] = df['x'].copy()
df['y old'] = df['y'].copy()
df = df.drop(columns=['x','y'])
corrected_traj.index.name=None
df = pd.merge(df, corrected_traj,
on='particle')
道歉,我尝试缩进并敲打代码,但似乎无法正确标记
我期望一个数据框df带有'x','y','frame','particle','x old','y old'。
相反,我得到的是“ x”,“ y”,“ frame_x”,“ frame_y”,“ x old”,“ y old”,“粒子”
“ x帧”和“ y帧”的内容确实是帧号值。
答案 0 :(得分:1)
如果要使数据框df具有“ x”,“ y”,“框架”,“粒子”,“ x旧”,“ y旧”,则应按以下方式合并以合并粒子和框架连接范围中的列。否则,将根据传递给“ on”的参数将它们视为要连接的列,因此将它们分别视为frame_x,frame_y以分别标识它们。
df = pd.merge(df, corrected_traj, on=['particle', 'frame'])