熊猫合并创建重复的条目

时间:2020-06-07 12:45:33

标签: python pandas

我正在合并两个数据帧,但是这样做时,我有很多重复项。 我的代码有点长,所以这是两个数据集的示例:

 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与以下两行汇总在一起。

enter image description here

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

谢谢

杰弗里

1 个答案:

答案 0 :(得分:0)

如果要保留所有列,则可以join带后缀,并且仅保留columnMerge中的列。

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]