首页 > 解决方案 > 根据条件合并数据框

问题描述

我有两个数据框,

a = {'SEX':[...], 'ENT':[...], 'XY':[...], 'RZD':[...], 'TOT':[...]}有形状769, 5

b = {'K':[...], 'NOM':[...], 'M':[...], SEX':[...], 'ENT':[...], 'POB':[...], 'RZD':[...], '%A':[...], '%B':[...]}与形状34398, 9

我需要基于 . 合并这些数据框'SEX', 'ENT', 'RZD'。合并后,我会在值不匹配的地方填充零。最后,我计算了一个新列FINAL,它等于a['%A'] * b['TOT']下面的代码:

local = b.merge(a, on=['ENT', 'RZD', 'SEX'], how='left')
local.fillna(0, inplace=True)
local['TOT'] = local['%A'].mul(local['TOT']).round(0)

我遇到的问题是

x1 = a['TOT'].sum()

应该等于

x2 = local['TOT'].sum()

但是,我得到了将近 600 万的差异。这意味着x2 >> x1

您是否推荐任何合并这些数据框并保持一致性的方法?

您可以在此处找到原始文件。

标签: pythonpandas

解决方案


试试df.join,看看这个how论点是否对你有帮助。该how参数将提醒您匹配的位置,而不是按条件合并,您可以使用对列进行向量操作

if df["column"] == "left_only":
  df["column"] = df["column"].str.replace("left_only", 0)

# repeat

推荐阅读