【问题标题】:Pandas merge creates duplicate entries熊猫合并创建重复条目
【发布时间】:2020-09-26 10:35:50
【问题描述】:

我正在合并两个数据框,但是当我这样做时,我有很多重复的条目。 我的代码有点长,下面是两个数据集的例子:

 df1
        Season  SeasonType  ... PitchingWalksPerNineInnings_17 PitchingWeightedOnBasePercentage_17
GameID                      ...
47547   2017.0         1.0  ...                            NaN                                 NaN
47546   2017.0         1.0  ...                            NaN                                 NaN
50022   2017.0         1.0  ...                            NaN                                 NaN
47556   2017.0         1.0  ...                            NaN                                 NaN
47557   2017.0         1.0  ...                            NaN                                 NaN
...        ...         ...  ...                            ...                                 ...
49970   2017.0         1.0  ...                            NaN                                 NaN
49964   2017.0         1.0  ...                            NaN                                 NaN
49974   2017.0         1.0  ...                            NaN                                 NaN
49975   2017.0         1.0  ...                            NaN                                 NaN
47562      NaN         NaN  ...                            NaN                                 NaN

df2
   GameID  StatID_28  ...  PitchingWalksPerNineInnings_28  PitchingWeightedOnBasePercentage_28
0   47562    1748078  ...                             5.0                                0.351

[1 rows x 52 columns]

GameID 列是我对两者的索引。 df1 可以有多个与 df2 相似的列,这就是我使用它来获取它们的原因:

columnsMerge = list(set(df.columns).intersection(set(tpstatdf.columns)))
columnsMerge.append('GameID')

我已经分享了这里生成的 csv 文件:https://drive.google.com/drive/folders/1RVKNsB42ixQ2I2WUqqu_dDNjmcVIz5No?usp=sharing

请在下面找到我得到的。预计只有一行带有游戏 id,并与以下两行聚合。

对此的任何帮助将不胜感激。

谢谢

杰弗里

【问题讨论】:

标签: python pandas


【解决方案1】:

如果你想保留所有的列,你可以join他们加上一个后缀,并且只保留columnsMerge中的cols。

df_merged = df1.join(df2, how='right', rsuffix='_df2')
columnsMerge = list(set(df.columns).intersection(set(tpstatdf.columns)))
cols = [c if any(c in s for s incolumnsMerge) for c in df_merged.columns]
df_merged = df_merged[cols]

【讨论】:

  • 感谢您的回答实际上 df1 和 df2 确实有相同的列,但没有相同的值,除了 GameID,这是我正在使用的合并(这是我的索引在两个df上)
  • 我已经更新了我的答案。希望这次我没听错。
  • 几乎。例如,假设我有 df1 具有以下列/值:GameID - X - X1 - X2 - X3 并且我有 df2:GameID - X20 - X21 - X22 预期结果将是:GameID - X1 - X2 - X3 - X20 - X21 - X22 使用 df 的值 - 并使用 gameID 完成合并,因为它是常见的价值
猜你喜欢
  • 2020-12-04
  • 2021-01-16
  • 1970-01-01
  • 2018-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-07
  • 2019-12-15
相关资源
最近更新 更多