python - 在 Pandas Python 中合并时如何避免笛卡尔

标签 python pandas merge duplicates cartesian

我正在尝试合并 2 个数据集 X 和 Y。数据集 X 具有包含重复值的连接键列。数据集 Y 具有连接键列和一个附加列。数据集图像已在下面上传。问题是由于数据集 X 中存在重复项,我想避免笛卡尔积。我在下面附上了结果数据集图像。这可以通过使用 for 循环手动合并来手动完成,但这很耗时。谁能提供更好的方法

All DataSets Image

最佳答案

使用@Alollz 设置:

df_x = pd.DataFrame({'EMM_ID': [610462, 610462, 610462, 610462, 61000, 61000],
                     'ID_home': [np.NaN, np.NaN, np.NaN, np.NaN, np.NaN, np.NaN]})
df_y = pd.DataFrame({'EMM_ID': [610462, 61000], 'ID_home': [81000, 18]})

您可以创建一个新的“ key ”来加入 cumcount。

colkey = 'EMM_ID'
df_x = df_x.assign(colkey=df_x.groupby(colkey).cumcount())
df_y = df_y.assign(colkey=df_y.groupby(colkey).cumcount())

df_x[['EMM_ID','colkey']].merge(df_y, on=['EMM_ID','colkey'], how='left')

输出:

   EMM_ID  colkey  ID_home
0  610462       0  81000.0
1  610462       1      NaN
2  610462       2      NaN
3  610462       3      NaN
4   61000       0     18.0
5   61000       1      NaN

关于python - 在 Pandas Python 中合并时如何避免笛卡尔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52277872/

相关文章:

python - 使用 python 解析 CSV 文件并转换为 Pandas Dataframe 以绘制 Django 模板的图形

mercurial - 在 Mercurial 中将 dev 分支 merge/转换为稳定分支的正确方法是什么?

git - 在压缩的公共(public)和初始私有(private)中拆分 git repo

list - 在 Haskell 中合并两个排序列表

python - 我可以将其表示为生成器/协程吗?

Python Pandas : Call column name from column assignment

python - 我是否需要研究子进程才能使此 python 源代码在另一种编程语言中工作?

python - 将新数据框添加到现有数据库,但仅在列名匹配时添加

python - 将变量分配给列表项python

python - 打印now()的所有格式