【问题标题】:Merge pandas doesn't work, it looks like concat合并熊猫不起作用,它看起来像concat
【发布时间】:2022-01-15 18:45:57
【问题描述】:

我一直在使用两个数据帧(info_clients 和 metadata_clients),它们分别有一个 user_idid_wp作为关联键,我将 info_clients 加载到 sql 表中并获取关联的 PK,然后将这些 dfs 合并到 user_id(左侧)和 id_wp(右侧)上。

info_clients: (72232, 1)

 user_id
0       0
1       1
2       4
3       5
4   39784

元数据客户端:(72232, 2)

        id  id_wp
0  1158426      0
1  1158427      1
2  1158428      4
3  1158429      5
4  1158430  39784

我用过这个:

merge = pd.merge( info_clients, metadata_clients, left_on=['user_id'], 
                            right_on=['id_wp'], how='left')

但它并没有像我预期的那样工作,我得到了这个结果:

  user_id  cliente_fk  id_wp
0       0     1158426      0
1       1     1158427      1
2       4     1158428      4
3       5     1158429      5
4   39784     1158430  39784
Datamerge shape: (126680, 3)

当我将 info_clients 数据保存到 sql 表中时,我会验证这些数据并保存了 72232 个客户端。 我没有 null 或 nan 值,我清理了数据并检查了它的 dtypes,两个键都是 int64。

【问题讨论】:

  • 如果有多个值,例如,多个cliente_fk 对应任何id_wp,您将在merge 中获得多行。如果是这种情况,您需要决定如何处理“重复”。
  • 你能确认是否会有任何重复吗?
  • 不,我没有重复,我在上一步中删除了,使用:data.drop_duplicates(keep='first')
  • @DiegoTriana:如果我提到的情况是导致重复的原因,那么该命令不会执行任何操作,因为这些被认为是唯一的行。

标签: python pandas merge


【解决方案1】:

您有重复的情况:

不,我没有重复,我在上一步中删除了,使用:
data.drop_duplicates(keep='first')

我不知道 data 是您的第一个 (info_clients) 还是您的第二个 (metadata_clients),但如果您在不设置列子集的情况下删除重复项,则很可能整行都没有重复项。你应该试试:

data = data.drop_duplicates('user_id', keep='first')

# OR

data = data.drop_duplicates('wp_id', keep='first')

您应该尝试使用value_counts 进行调试:

data.value_counts('user_id')

# OR

data.value_counts('wp_id')

【讨论】:

    猜你喜欢
    • 2015-12-24
    • 2017-11-23
    • 2015-02-01
    • 2022-01-09
    • 2017-12-29
    • 2018-10-22
    • 1970-01-01
    • 2012-08-24
    • 2019-04-21
    相关资源
    最近更新 更多