【问题标题】:pd.merge generating new column namespd.merge 生成新的列名
【发布时间】:2019-09-03 01:28:53
【问题描述】:

合并 2 个数据框,这些数据框有一些常见的列名和一些不同的列名。产生新的列名,它们都不在,而是将每个名称的字符串组合在一起。

2 个数据框:

df.columns 包括 'particle'、'frame'、'x old'、'y old' Corrected_traj.columns 有 'particle', 'frame', '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')

抱歉,我尝试缩进并点击代码,但似乎无法正确标记

我期待一个带有'x'、'y'、'frame'、'particle'、'x old'、'y old'的数据框df。

我得到的是'x'、'y'、'frame_x'、'frame_y'、'x old'、'y old'、'particle'

'frame x 和 'frame y' 的内容似乎确实是帧编号值。

【问题讨论】:

  • 听起来你在两个数据帧中都有'frame'列,并且由于你告诉pandas在合并时只使用'particle',它留下了两列名为'frame'的列,它不能合并,因此它向您展示了两者,为“df”中的值添加了后缀“_x”,为“corrected_traj”中的值添加了“_y”

标签: python pandas


【解决方案1】:

如果你想要一个数据帧 df 带有 'x','y','frame','particle','x old', 'y old',那么你应该如下合并以合并粒子和帧加入范围中的列。否则,它们将被视为基于传递给“on”的参数连接的列,因此被视为 frame_x、frame_y 以分别标识它们。

df = pd.merge(df, corrected_traj, on=['particle', 'frame'])

【讨论】:

  • 太棒了。谢谢,这让我发疯了!
猜你喜欢
  • 1970-01-01
  • 2021-02-04
  • 2020-04-13
  • 1970-01-01
  • 2016-12-27
  • 1970-01-01
  • 2020-02-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多